From de33b3affa6f77a28012798ae09aa02492c280e7 Mon Sep 17 00:00:00 2001 From: Lukas Holecek Date: Sun, 26 Oct 2014 07:38:27 +0100 Subject: [PATCH] FakeVim: Properly replay macro with command line Change-Id: I40617a1f6d28052e3593c186afb6db1d14222076 Reviewed-by: hjk --- src/plugins/fakevim/fakevim_test.cpp | 19 +++++++++++++++++++ src/plugins/fakevim/fakevimhandler.cpp | 6 +++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/plugins/fakevim/fakevim_test.cpp b/src/plugins/fakevim/fakevim_test.cpp index 54ed8f2a9ca..0f15c3ee7eb 100644 --- a/src/plugins/fakevim/fakevim_test.cpp +++ b/src/plugins/fakevim/fakevim_test.cpp @@ -3476,6 +3476,25 @@ void FakeVimPlugin::test_macros() data.setText(" abc xyz>." N " def xyz>." N " ghi xyz>." N " jkl xyz>."); KEYS("qq" "^wdf>j" "q", " abc ." N " def " X "xyz>." N " ghi xyz>." N " jkl xyz>."); KEYS("2@q", " abc ." N " def ." N " ghi ." N " jkl " X "xyz>."); + + // record command line + data.setText("abc" N "def"); + KEYS("qq" ":s/./*/g" "iX" "q", X "Xabc" N "def"); + KEYS("@q", X "XXabc" N "def"); + + KEYS("qq" ":s/./*/g" "iY" "q", X "YXXabc" N "def"); + KEYS("@q", X "YYXXabc" N "def"); + + KEYS("qq" ":s/./*/g" "q", X "*******" N "def"); + KEYS("j@q", "*******" N X "***"); + + // record repeating last command + data.setText("abc" N "def"); + KEYS(":s/./-/g", X "---" N "def"); + KEYS("u", X "abc" N "def"); + KEYS("qq" ":" "q", X "---" N "def"); + KEYS(":s/./!/g", X "!!!" N "def"); + KEYS("j@q", "!!!" N X "!!!"); } void FakeVimPlugin::test_vim_qtcreator() diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index 8c7df809137..68e3280150f 100644 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -1856,6 +1856,7 @@ public: Q_SLOT void onContentsChanged(int position, int charsRemoved, int charsAdded); Q_SLOT void onUndoCommandAdded(); + bool isCommandLineMode() const { return g.mode == ExMode || g.subsubmode == SearchSubSubMode; } bool isInsertMode() const { return g.mode == InsertMode || g.mode == ReplaceMode; } // Waiting for movement operator. bool isOperatorPending() const { @@ -2283,7 +2284,7 @@ void FakeVimHandler::Private::focus() commitCursor(); } - bool exitCommandLine = (g.subsubmode == SearchSubSubMode || g.mode == ExMode); + bool exitCommandLine = isCommandLineMode(); resetCommandMode(); if (exitCommandLine) updateMiniBuffer(); @@ -7892,6 +7893,9 @@ void FakeVimHandler::Private::enterVisualInsertMode(QChar command) void FakeVimHandler::Private::enterCommandMode(Mode returnToMode) { + if (g.isRecording && isCommandLineMode()) + record(Input(Key_Escape, NoModifier)); + if (isNoVisualMode() && atEndOfLine()) moveLeft(); g.mode = CommandMode;