aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/fakevim
diff options
context:
space:
mode:
authorLukas Holecek <hluk@email.cz>2014-10-26 07:38:27 +0100
committerhjk <hjk121@nokiamail.com>2014-11-03 11:19:39 +0100
commitde33b3affa6f77a28012798ae09aa02492c280e7 (patch)
treed615f6403edcc8e969d0f8bd4f081aea2b4bd252 /src/plugins/fakevim
parent3ebdcdc7bfc1c39db8d955ca294e0c65766920cf (diff)
FakeVim: Properly replay macro with command line
Change-Id: I40617a1f6d28052e3593c186afb6db1d14222076 Reviewed-by: hjk <hjk121@nokiamail.com>
Diffstat (limited to 'src/plugins/fakevim')
-rw-r--r--src/plugins/fakevim/fakevim_test.cpp19
-rw-r--r--src/plugins/fakevim/fakevimhandler.cpp6
2 files changed, 24 insertions, 1 deletions
diff --git a/src/plugins/fakevim/fakevim_test.cpp b/src/plugins/fakevim/fakevim_test.cpp
index 54ed8f2a9c..0f15c3ee7e 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<ESC>" "iX<ESC>" "q", X "Xabc" N "def");
+ KEYS("@q", X "XXabc" N "def");
+
+ KEYS("qq" ":s/./*/g<BS><BS><BS><BS><BS><BS><BS><BS>" "iY<ESC>" "q", X "YXXabc" N "def");
+ KEYS("@q", X "YYXXabc" N "def");
+
+ KEYS("qq" ":s/./*/g<CR>" "q", X "*******" N "def");
+ KEYS("j@q", "*******" N X "***");
+
+ // record repeating last command
+ data.setText("abc" N "def");
+ KEYS(":s/./-/g<CR>", X "---" N "def");
+ KEYS("u", X "abc" N "def");
+ KEYS("qq" ":<UP><CR>" "q", X "---" N "def");
+ KEYS(":s/./!/g<CR>", 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 8c7df80913..68e3280150 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;