diff --git a/src/plugins/fakevim/handler.cpp b/src/plugins/fakevim/handler.cpp index 487ac32f293f7b66553639521432313d12a4c0c5..255892e3ed3965923ba0e66fe1d40061bf690abf 100644 --- a/src/plugins/fakevim/handler.cpp +++ b/src/plugins/fakevim/handler.cpp @@ -375,13 +375,15 @@ void FakeVimHandler::Private::handleCommandMode(int key, const QString &text) m_tc.movePosition(EndOfLine, KeepAnchor); finishMovement(); } else if (key == 'a') { + m_mode = InsertMode; m_lastInsertion.clear(); + m_tc.beginEditBlock(); m_tc.movePosition(Right, MoveAnchor, 1); - m_mode = InsertMode; } else if (key == 'A') { + m_mode = InsertMode; + m_tc.beginEditBlock(); m_tc.movePosition(EndOfLine, MoveAnchor); m_lastInsertion.clear(); - m_mode = InsertMode; } else if (key == 'b') { moveToWordBoundary(false, false); finishMovement(); @@ -390,8 +392,10 @@ void FakeVimHandler::Private::handleCommandMode(int key, const QString &text) finishMovement(); } else if (key == 'c') { m_submode = ChangeSubMode; + m_tc.beginEditBlock(); } else if (key == 'C') { m_submode = ChangeSubMode; + m_tc.beginEditBlock(); m_tc.movePosition(EndOfLine, KeepAnchor); finishMovement(); } else if (key == 'd') { @@ -434,8 +438,9 @@ void FakeVimHandler::Private::handleCommandMode(int key, const QString &text) moveToFirstNonBlankOnLine(); finishMovement(); } else if (key == 'i') { - m_lastInsertion.clear(); m_mode = InsertMode; + m_tc.beginEditBlock(); + m_lastInsertion.clear(); } else if (key == 'j' || key == Key_Down) { m_tc.movePosition(Down, KeepAnchor, count()); finishMovement(); @@ -488,6 +493,11 @@ void FakeVimHandler::Private::handleCommandMode(int key, const QString &text) } } else if (key == control('r')) { EDITOR(redo()); + } else if (key == 's') { + m_submode = ChangeSubMode; + m_tc.beginEditBlock(); + m_tc.movePosition(Right, KeepAnchor, qMin(count(), rightDist())); + finishMovement(); } else if (key == 't' || key == 'T') { m_subsubmode = FtSubSubMode; m_subsubdata = key; @@ -542,10 +552,11 @@ void FakeVimHandler::Private::handleCommandMode(int key, const QString &text) void FakeVimHandler::Private::handleInsertMode(int key, const QString &text) { if (key == Key_Escape) { - m_mode = CommandMode; for (int i = 1; i < count(); ++i) m_tc.insertText(m_lastInsertion); m_tc.movePosition(Left, MoveAnchor, qMin(1, leftDist())); + m_mode = CommandMode; + m_tc.endEditBlock(); } else if (key == Key_Left) { m_tc.movePosition(Left, MoveAnchor, 1); m_lastInsertion.clear(); diff --git a/src/plugins/fakevim/handler.h b/src/plugins/fakevim/handler.h index 56184aa887fb32b9fe54dbbe8732710fe5a742f9..1ebf9adb8e47202bcc50d14da7c3a5cb1ce334c8 100644 --- a/src/plugins/fakevim/handler.h +++ b/src/plugins/fakevim/handler.h @@ -62,7 +62,7 @@ public: signals: void commandBufferChanged(const QString &msg); - void quitRequested(QObject *); + void quitRequested(QWidget *); private: bool eventFilter(QObject *ob, QEvent *ev);