diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index be76ee294111499f302520f35ad662cad45ced02..25f0b7032f9078688a7b7c7c90d3be543d91741e 100644 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -311,6 +311,7 @@ public: EventResult handleCommandMode(int key, int unmodified, const QString &text); EventResult handleRegisterMode(int key, int unmodified, const QString &text); EventResult handleMiniBufferModes(int key, int unmodified, const QString &text); + EventResult handleCommandSubSubMode(int key, int unmodified, const QString &text); void finishMovement(const QString &dotCommand = QString()); void finishMovement(const QString &dotCommand, int count); void resetCommandMode(); @@ -1175,22 +1176,12 @@ static bool subModeCanUseTextObjects(int submode) return submode == DeleteSubMode; } -EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified, +EventResult FakeVimHandler::Private::handleCommandSubSubMode(int key, int unmodified, const QString &text) { + Q_UNUSED(unmodified); EventResult handled = EventHandled; - - if (key == Key_Escape || key == control(Key_BracketLeft)) { - if (isVisualMode()) { - leaveVisualMode(); - } else if (m_submode != NoSubMode) { - m_submode = NoSubMode; - m_subsubmode = NoSubSubMode; - finishMovement(); - } else { - resetCommandMode(); - } - } else if (m_subsubmode == FtSubSubMode) { + if (m_subsubmode == FtSubSubMode) { m_semicolonType = m_subsubdata; m_semicolonKey = key; bool valid = handleFfTt(key); @@ -1233,6 +1224,43 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified, m_replacingCharacter = text[0]; finishMovement(); } + } else if (m_subsubmode == MarkSubSubMode) { + m_marks[key] = m_tc.position(); + m_subsubmode = NoSubSubMode; + } else if (m_subsubmode == BackTickSubSubMode + || m_subsubmode == TickSubSubMode) { + if (m_marks.contains(key)) { + setPosition(m_marks[key]); + if (m_subsubmode == TickSubSubMode) + moveToFirstNonBlankOnLine(); + finishMovement(); + } else { + showRedMessage(msgE20MarkNotSet(text)); + } + m_subsubmode = NoSubSubMode; + } else { + handled = EventUnhandled; + } + return handled; +} + +EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified, + const QString &text) +{ + EventResult handled = EventHandled; + + if (key == Key_Escape || key == control(Key_BracketLeft)) { + if (isVisualMode()) { + leaveVisualMode(); + } else if (m_submode != NoSubMode) { + m_submode = NoSubMode; + m_subsubmode = NoSubSubMode; + finishMovement(); + } else { + resetCommandMode(); + } + } else if (m_subsubmode != NoSubSubMode) { + handleCommandSubSubMode(key, unmodified, text); } else if (m_submode == WindowSubMode) { emit q->windowCommandRequested(key); m_submode = NoSubMode; @@ -1331,20 +1359,6 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified, setTargetColumn(); m_submode = NoSubMode; finishMovement(); - } else if (m_subsubmode == MarkSubSubMode) { - m_marks[key] = m_tc.position(); - m_subsubmode = NoSubSubMode; - } else if (m_subsubmode == BackTickSubSubMode - || m_subsubmode == TickSubSubMode) { - if (m_marks.contains(key)) { - setPosition(m_marks[key]); - if (m_subsubmode == TickSubSubMode) - moveToFirstNonBlankOnLine(); - finishMovement(); - } else { - showRedMessage(msgE20MarkNotSet(text)); - } - m_subsubmode = NoSubSubMode; } else if (key >= '0' && key <= '9') { if (key == '0' && m_mvcount.isEmpty()) { m_movetype = MoveExclusive;