From ab47d78c0c82d3806349462183c463a98d574885 Mon Sep 17 00:00:00 2001
From: hjk <qtc-committer@nokia.com>
Date: Mon, 4 May 2009 09:35:46 +0200
Subject: [PATCH] fakevim: handle Key_Insert

---
 src/plugins/fakevim/fakevimhandler.cpp | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp
index 035fdb67928..52eb88e9164 100644
--- a/src/plugins/fakevim/fakevimhandler.cpp
+++ b/src/plugins/fakevim/fakevimhandler.cpp
@@ -794,7 +794,10 @@ void FakeVimHandler::Private::updateMiniBuffer()
             msg = "-- VISUAL BLOCK --";
         }
     } else if (m_mode == InsertMode) {
-        msg = "-- INSERT --";
+        if (m_submode == ReplaceSubMode)
+            msg = "-- REPLACE --";
+        else
+            msg = "-- INSERT --";
     } else {
         if (m_mode == SearchForwardMode)
             msg += '/';
@@ -1200,7 +1203,7 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
         moveDown(qMax(count() - 1, 0));
         handleStartOfLine();
         finishMovement();
-    } else if (key == 'i') {
+    } else if (key == 'i' || key == Key_Insert) {
         setDotCommand("i"); // setDotCommand("%1i", count());
         enterInsertMode();
         updateMiniBuffer();
@@ -1484,6 +1487,16 @@ EventResult FakeVimHandler::Private::handleInsertMode(int key, int,
         m_dotCommand += QChar(27);
         recordNewUndo();
         enterCommandMode();
+    } else if (key == Key_Insert) {
+        if (m_submode == ReplaceSubMode) {
+            EDITOR(setCursorWidth(m_cursorWidth));
+            EDITOR(setOverwriteMode(false));
+            m_submode = NoSubMode;
+        } else {
+            EDITOR(setCursorWidth(m_cursorWidth));
+            EDITOR(setOverwriteMode(true));
+            m_submode = ReplaceSubMode;
+        }
     } else if (key == Key_Left) {
         moveLeft(count());
         m_lastInsertion.clear();
-- 
GitLab