From d11475ad0847a3016f70c4aa13324b1540fce671 Mon Sep 17 00:00:00 2001 From: hjk <qtc-committer@nokia.com> Date: Thu, 22 Jan 2009 14:19:42 +0100 Subject: [PATCH] Fixes: fakevim Details: fix behaviour of 'r' --- src/plugins/fakevim/fakevimhandler.cpp | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index ceafa52354a..eab3d04f3d5 100644 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -105,7 +105,7 @@ enum SubMode ChangeSubMode, DeleteSubMode, FilterSubMode, - ReplaceSubMode, + ReplaceSubMode, // used for R YankSubMode, IndentSubMode, ZSubMode, @@ -117,7 +117,8 @@ enum SubSubMode FtSubSubMode, // used for f, F, t, T MarkSubSubMode, // used for m BackTickSubSubMode, // used for ` - TickSubSubMode // used for ' + TickSubSubMode, // used for ' + ReplaceSubSubMode // used for r }; enum VisualMode @@ -301,7 +302,6 @@ public: QStack<int> m_undoGroupStack; // extra data for '.' - QString m_dotCount; QString m_dotCommand; // history for '/' @@ -468,6 +468,7 @@ void FakeVimHandler::Private::finishMovement(const QString &dotCommand) m_submode = NoSubMode; } else if (m_moveType == MoveExclusive) { moveLeft(); // correct + m_moveType = MoveInclusive; } m_mvcount.clear(); m_opcount.clear(); @@ -655,6 +656,22 @@ bool FakeVimHandler::Private::handleCommandMode(int key, int unmodified, handleFfTt(key); m_subsubmode = NoSubSubMode; finishMovement(QString(QChar(m_subsubdata)) + QChar(key)); + } else if (m_subsubmode == ReplaceSubSubMode) { + if (count() < rightDist() && text.size() == 1 + && (text.at(0).isPrint() || text.at(0).isSpace())) { + recordBeginGroup(); + setAnchor(); + moveRight(count()); + recordRemoveSelectedText(); + recordInsertText(QString(count(), text.at(0))); + recordEndGroup(); + m_moveType = MoveExclusive; + m_subsubmode = NoSubSubMode; + m_dotCommand = QString("%1r%2").arg(count()).arg(text); + finishMovement(); + } else { + m_subsubmode = NoSubSubMode; + } } else if (m_subsubmode == MarkSubSubMode) { m_marks[key] = m_tc.position(); m_subsubmode = NoSubSubMode; @@ -930,8 +947,7 @@ bool FakeVimHandler::Private::handleCommandMode(int key, int unmodified, recordEndGroup(); m_dotCommand = "p"; } else if (key == 'r') { - recordBeginGroup(); - m_submode = ReplaceSubMode; + m_subsubmode = ReplaceSubSubMode; m_dotCommand = "r"; } else if (key == 'R') { recordBeginGroup(); -- GitLab