From d29b5cd2081687358924908c0d93a25e8d219948 Mon Sep 17 00:00:00 2001
From: hjk <qtc-committer@nokia.com>
Date: Tue, 15 Dec 2009 13:38:20 +0100
Subject: [PATCH] fakevim: make auto-inserted text part of 'last insertion', so
 it can be repeated

---
 src/plugins/fakevim/fakevimhandler.cpp | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp
index ae5d7164997..de6fb38cbab 100755
--- a/src/plugins/fakevim/fakevimhandler.cpp
+++ b/src/plugins/fakevim/fakevimhandler.cpp
@@ -396,7 +396,7 @@ public:
     int m_subsubdata;
     QString m_input;
     QTextCursor m_tc;
-    QTextCursor m_oldTc; // copy from last event to check for external changes
+    int m_oldPosition; // copy from last event to check for external changes
     int m_anchor;
     static QHash<int, Register> m_registers;
     int m_register;
@@ -589,8 +589,18 @@ EventResult FakeVimHandler::Private::handleEvent(QKeyEvent *ev)
     // Fake "End of line"
     m_tc = EDITOR(textCursor());
 
-    if (m_tc.position() != m_oldTc.position())
+    // Position changed externally
+    if (m_tc.position() != m_oldPosition) {
         setTargetColumn();
+        if (m_mode == InsertMode) {
+            int dist = m_tc.position() - m_oldPosition;
+            // Try to compensate for code completion
+            if (dist > 0 && dist <= cursorColumnInDocument()) {
+                Range range(m_oldPosition, m_tc.position());
+                m_lastInsertion.append(text(range));
+            }
+        }
+    }
 
     m_tc.setVisualNavigation(true);
 
@@ -617,8 +627,8 @@ EventResult FakeVimHandler::Private::handleEvent(QKeyEvent *ev)
     if (m_fakeEnd)
         moveLeft();
 
-    m_oldTc = m_tc;
     EDITOR(setTextCursor(m_tc));
+    m_oldPosition = m_tc.position();
     return result;
 }
 
-- 
GitLab