From b324a7b789d239eb7855ac04dc763a35a4423e2d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20Aum=C3=BCller?= <aumuell@reserv.at>
Date: Thu, 21 Jan 2010 17:38:25 +0100
Subject: [PATCH] fakevim: implement 'o'/'O' in visual mode for swapping anchor
 and position

Merge-request: 99
Reviewed-by: hjk <qtc-committer@nokia.com>
---
 src/plugins/fakevim/fakevimhandler.cpp | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp
index 3a76b7d0050..563c06354c4 100755
--- a/src/plugins/fakevim/fakevimhandler.cpp
+++ b/src/plugins/fakevim/fakevimhandler.cpp
@@ -802,7 +802,7 @@ void FakeVimHandler::Private::finishMovement(const QString &dotCommand)
         return;
     }
 
-    if (isNoVisualMode())
+    if (isVisualMode())
         m_marks['>'] = m_tc.position();
 
     if (m_submode == ChangeSubMode) {
@@ -1562,6 +1562,12 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
         } else
             search(lastSearchString(), m_lastSearchForward);
         recordJump();
+    } else if (isVisualMode() && (key == 'o' || key == 'O')) {
+        int pos = position();
+        setPosition(anchor());
+        m_anchor = pos;
+        std::swap(m_marks['<'], m_marks['>']);
+        updateSelection();
     } else if (key == 'o' || key == 'O') {
         beginEditBlock();
         setDotCommand("%1o", count());
-- 
GitLab