From 9a224d7e464e4d1e99641fc457d21b9b98478adc Mon Sep 17 00:00:00 2001 From: hjk <qtc-committer@nokia.com> Date: Thu, 22 Jan 2009 15:08:50 +0100 Subject: [PATCH] Fixes: fakevim: 'r' and 'R' revisited --- src/plugins/fakevim/fakevimhandler.cpp | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index eab3d04f3d5..1cf4e8c5369 100644 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -105,7 +105,7 @@ enum SubMode ChangeSubMode, DeleteSubMode, FilterSubMode, - ReplaceSubMode, // used for R + ReplaceSubMode, // used for R and r YankSubMode, IndentSubMode, ZSubMode, @@ -113,12 +113,13 @@ enum SubMode enum SubSubMode { + // typically used for things that require one more data item + // and are 'nested' behind a mode NoSubSubMode, FtSubSubMode, // used for f, F, t, T MarkSubSubMode, // used for m BackTickSubSubMode, // used for ` TickSubSubMode, // used for ' - ReplaceSubSubMode // used for r }; enum VisualMode @@ -633,12 +634,6 @@ bool FakeVimHandler::Private::handleCommandMode(int key, int unmodified, moveDown(count()); m_moveType = MoveLineWise; finishMovement("y"); - } else if (m_submode == ReplaceSubMode) { - if (atEol()) - moveLeft(); - else - m_tc.deleteChar(); - recordInsertText(text); } else if (m_submode == IndentSubMode && key == '=') { indentRegion(m_tc.block(), m_tc.block().next()); finishMovement(); @@ -656,7 +651,7 @@ 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) { + } else if (m_submode == ReplaceSubMode) { if (count() < rightDist() && text.size() == 1 && (text.at(0).isPrint() || text.at(0).isSpace())) { recordBeginGroup(); @@ -666,11 +661,11 @@ bool FakeVimHandler::Private::handleCommandMode(int key, int unmodified, recordInsertText(QString(count(), text.at(0))); recordEndGroup(); m_moveType = MoveExclusive; - m_subsubmode = NoSubSubMode; + m_submode = NoSubMode; m_dotCommand = QString("%1r%2").arg(count()).arg(text); finishMovement(); } else { - m_subsubmode = NoSubSubMode; + m_submode = NoSubMode; } } else if (m_subsubmode == MarkSubSubMode) { m_marks[key] = m_tc.position(); @@ -947,10 +942,13 @@ bool FakeVimHandler::Private::handleCommandMode(int key, int unmodified, recordEndGroup(); m_dotCommand = "p"; } else if (key == 'r') { - m_subsubmode = ReplaceSubSubMode; + m_submode = ReplaceSubMode; m_dotCommand = "r"; } else if (key == 'R') { + // FIXME: right now we repeat the insertion count() times, + // but not the deletion recordBeginGroup(); + m_lastInsertion.clear(); m_mode = InsertMode; m_submode = ReplaceSubMode; m_dotCommand = "R"; -- GitLab