From f11c85d58cd0a73f12e4efd52d3402081f8fc095 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Aum=C3=BCller?= <aumuell@reserv.at> Date: Thu, 18 Mar 2010 13:15:59 +0100 Subject: [PATCH] fakevim: improve behaviour of some editing commands while in visual mode Merge-request: 131 Reviewed-by: hjk <qtc-committer@nokia.com> --- src/plugins/fakevim/fakevimhandler.cpp | 29 +++++++++++++++++--------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index de1a530b1a2..18fc1a28260 100644 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -1428,7 +1428,8 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified, setAnchor(); moveToMatchingParanthesis(); finishMovement(); - } else if (key == 'a') { + } else if ((!isVisualMode() && key == 'a') || (isVisualMode() && key == 'A')) { + leaveVisualMode(); enterInsertMode(); m_lastInsertion.clear(); if (!atEndOfLine()) @@ -1455,12 +1456,17 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified, moveLeft(); setAnchor(); m_submode = ChangeSubMode; - } else if (key == 'c' && (isVisualCharMode() || isVisualLineMode())) { - m_rangemode = isVisualCharMode() ? RangeCharMode : RangeLineMode; - if (isVisualLineMode()) { + } else if ((key == 'c' || key == 'C' || key == 's' || key == 'R') + && (isVisualCharMode() || isVisualLineMode())) { + if((key == 'c'|| key == 's') && isVisualCharMode()) { + leaveVisualMode(); + m_rangemode = RangeCharMode; + } else { + leaveVisualMode(); + m_rangemode = RangeLineMode; + // leaveVisualMode() has set this to MoveInclusive for visual character mode m_movetype = MoveLineWise; } - leaveVisualMode(); m_submode = ChangeSubMode; finishMovement(); } else if (key == 'C') { @@ -1590,7 +1596,7 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified, moveDown(qMax(count() - 1, 0)); handleStartOfLine(); finishMovement(); - } else if (key == 'i' || key == Key_Insert) { + } else if (!isVisualMode() && (key == 'i' || key == Key_Insert)) { setDotCommand(QString(QLatin1Char('i'))); // setDotCommand("%1i", count()); enterInsertMode(); updateMiniBuffer(); @@ -1727,7 +1733,7 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified, } else if (key == 'r') { m_submode = ReplaceSubMode; setDotCommand(QString(QLatin1Char('r'))); - } else if (key == 'R') { + } else if (!isVisualMode() && key == 'R') { // FIXME: right now we repeat the insertion count() times, // but not the deletion m_lastInsertion.clear(); @@ -1738,6 +1744,7 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified, } else if (key == control('r')) { redo(); } else if (key == 's') { + leaveVisualMode(); if (atEndOfLine()) moveLeft(); setAnchor(); @@ -1749,9 +1756,11 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified, m_mvcount.clear(); enterInsertMode(); } else if (key == 'S') { - const int line = cursorLineInDocument() + 1; - setAnchor(firstPositionInLine(line)); - setPosition(lastPositionInLine(line + count() - 1)); + if(!isVisualMode()) { + const int line = cursorLineInDocument() + 1; + setAnchor(firstPositionInLine(line)); + setPosition(lastPositionInLine(line + count() - 1)); + } setDotCommand("%1S", count()); enterInsertMode(); m_beginEditBlock = false; -- GitLab