From 2622eb2415c46a3c77545dd1aa9da50f56992b23 Mon Sep 17 00:00:00 2001
From: Lukas Holecek <hluk@email.cz>
Date: Wed, 16 Jan 2013 17:49:37 +0100
Subject: [PATCH] FakeVim: Remember that cursor is at the end of line

Change-Id: I62098a409028593664b813931d5974de5e787993
Reviewed-by: hjk <qthjk@ovi.com>
---
 src/plugins/fakevim/fakevim_test.cpp   | 7 +++++++
 src/plugins/fakevim/fakevimhandler.cpp | 8 +++++++-
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/src/plugins/fakevim/fakevim_test.cpp b/src/plugins/fakevim/fakevim_test.cpp
index 1e9019055b3..4219f3607b6 100644
--- a/src/plugins/fakevim/fakevim_test.cpp
+++ b/src/plugins/fakevim/fakevim_test.cpp
@@ -421,6 +421,13 @@ void FakeVimPlugin::test_vim_movement()
     data.setText("abc def" N "ghi");
     KEYS("$a", "abc def" X N "ghi");
 
+    data.setText("abc" N "def ghi");
+    KEYS("i<end><down>", "abc" N "def ghi" X);
+    data.setText("abc" N "def ghi");
+    KEYS("<end>i<down>", "abc" N "de" X "f ghi");
+    data.setText("abc" N "def ghi");
+    KEYS("<end>a<down>", "abc" N "def" X " ghi");
+
     // paragraph movement
     data.setText("abc"  N   N "def");
     KEYS("}",     "abc" N X N "def");
diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp
index 30b75efab82..6731ddbb4af 100644
--- a/src/plugins/fakevim/fakevimhandler.cpp
+++ b/src/plugins/fakevim/fakevimhandler.cpp
@@ -4220,6 +4220,7 @@ EventResult FakeVimHandler::Private::handleInsertMode(const Input &input)
         moveBehindEndOfLine();
         move = true;
         setTargetColumn();
+        m_targetColumn = -1;
     } else if (input.isReturn() || input.isControl('j') || input.isControl('m')) {
         joinPreviousEditBlock();
         m_submode = NoSubMode;
@@ -6686,7 +6687,12 @@ void FakeVimHandler::Private::enterInsertMode()
     m_subsubmode = NoSubSubMode;
     m_lastInsertion.clear();
     m_oldPosition = position();
-    g.returnToMode = InsertMode;
+    if (g.returnToMode != InsertMode) {
+        g.returnToMode = InsertMode;
+        // If entering insert mode from command mode, m_targetColumn shouldn't be -1 (end of line).
+        if (m_targetColumn == -1)
+            setTargetColumn();
+    }
 }
 
 void FakeVimHandler::Private::initVisualBlockInsertMode(QChar command)
-- 
GitLab