From 9a774254bf1257af0911d52b8636c2f4553d6053 Mon Sep 17 00:00:00 2001 From: Lukas Holecek Date: Thu, 20 Dec 2012 18:29:20 +0100 Subject: [PATCH] fakevim: Escape insert command and correct undo position for "I" Escape inserted string for repeatition, e.g. command "2i" will insert text "". Undo position for "I" is start of selection or line. Change-Id: Ic7e6d8dbf712197b36be20b17ef6d1c0814b1a51 Reviewed-by: hjk --- src/plugins/fakevim/fakevim_test.cpp | 10 ++++++++++ src/plugins/fakevim/fakevimhandler.cpp | 3 ++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/plugins/fakevim/fakevim_test.cpp b/src/plugins/fakevim/fakevim_test.cpp index 1e4c1cd5ed7..1881379ecff 100644 --- a/src/plugins/fakevim/fakevim_test.cpp +++ b/src/plugins/fakevim/fakevim_test.cpp @@ -548,6 +548,16 @@ void FakeVimPlugin::test_vim_insert() data.setText("abc" N "de" X "f" N "" N "jkl" N "mno"); KEYS("2jh" "2I" "XYZ", "abc" N "d" X "XYZXYZef" N "" N "jXYZXYZkl" N "mno"); INTEGRITY(false); + + // repeat insert with special characters + data.setText("ab" X "c" N "def"); + KEYS("2idown>", "abc" N "def"); + INTEGRITY(false); + + data.setText(" ab" X "c" N " def"); + KEYS("2Iend>", " abc" N " def"); + KEYS("u", " " X "abc" N " def"); + KEYS(".", " abc" N " def"); } void FakeVimPlugin::test_vim_fFtT() diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index 8ccdfb8107a..b3cc113ed3d 100644 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -3548,7 +3548,6 @@ bool FakeVimHandler::Private::handleNoSubMode(const Input &input) if (atEndOfLine()) moveLeft(); } else if (input.is('I')) { - setUndoPosition(); if (isVisualMode()) { initVisualBlockInsertMode(QLatin1Char('I')); } else { @@ -3559,6 +3558,7 @@ bool FakeVimHandler::Private::handleNoSubMode(const Input &input) moveToFirstNonBlankOnLine(); //m_tc.clearSelection(); } + setUndoPosition(); breakEditBlock(); enterInsertMode(); } else if (input.isControl('i')) { @@ -4263,6 +4263,7 @@ EventResult FakeVimHandler::Private::handleInsertMode(const Input &input) } else if (!input.text().isEmpty()) { insert = input.text(); insertInInsertMode(insert); + insert.replace(_("<"), _("")); } else { // We don't want fancy stuff in insert mode. return EventHandled;