From 1a0056eea9126246d2cd782de2305e167cf2c946 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 2 Aug 2011 17:59:05 +0200 Subject: fakevim: v in visual mode actually leave visual mode Task-number: QTCREATORBUG-5603 Change-Id: I239837b1d8ad30fdc157a6eaec05a026c294a750 (cherry picked from commit 764f902cf39da75260a1771d6d55a2f41be8dcca) Reviewed-on: http://codereview.qt.nokia.com/2578 Reviewed-by: Qt Sanity Bot Reviewed-by: Eike Ziller --- src/plugins/fakevim/fakevimhandler.cpp | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) (limited to 'src/plugins/fakevim') diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index 6372beefb9..f441747696 100644 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -906,8 +906,8 @@ public: Input m_semicolonType; // 'f', 'F', 't', 'T' QString m_semicolonKey; - // visual line mode - void enterVisualMode(VisualMode visualMode); + // visual modes + void toggleVisualMode(VisualMode visualMode); void leaveVisualMode(); VisualMode m_visualMode; VisualMode m_oldVisualMode; @@ -2520,11 +2520,11 @@ EventResult FakeVimHandler::Private::handleCommandMode2(const Input &input) scrollToLine(cursorLine() - sline); finishMovement(); } else if (input.is('v')) { - enterVisualMode(VisualCharMode); + toggleVisualMode(VisualCharMode); } else if (input.is('V')) { - enterVisualMode(VisualLineMode); + toggleVisualMode(VisualLineMode); } else if (input.isControl('v')) { - enterVisualMode(VisualBlockMode); + toggleVisualMode(VisualBlockMode); } else if (input.is('w')) { // tested // Special case: "cw" and "cW" work the same as "ce" and "cE" if the // cursor is on a non-blank - except if the cursor is on the last @@ -4614,17 +4614,21 @@ int FakeVimHandler::Private::lineForPosition(int pos) const return tc.block().blockNumber() + 1; } -void FakeVimHandler::Private::enterVisualMode(VisualMode visualMode) +void FakeVimHandler::Private::toggleVisualMode(VisualMode visualMode) { - m_positionPastEnd = false; - m_anchorPastEnd = false; - m_visualMode = visualMode; - const int pos = position(); - //setMark('<', pos); - //setMark('>', pos + 1); - setAnchorAndPosition(pos, pos); - updateMiniBuffer(); - updateSelection(); + if (isVisualMode()) { + leaveVisualMode(); + } else { + m_positionPastEnd = false; + m_anchorPastEnd = false; + m_visualMode = visualMode; + const int pos = position(); + //setMark('<', pos); + //setMark('>', pos + 1); + setAnchorAndPosition(pos, pos); + updateMiniBuffer(); + updateSelection(); + } } void FakeVimHandler::Private::leaveVisualMode() -- cgit v1.2.1