From 4fc706d7e04abcbdd77d1687e9f4fc0971b8eb07 Mon Sep 17 00:00:00 2001 From: hluk Date: Tue, 2 Apr 2013 17:56:12 +0200 Subject: [PATCH] FakeVim: Don't handle user mapping in some commands Don't handle user mappings in commands that cannot be followed by movement command. For example, key "" in after "t" command cannot be handled as user mapping. Change-Id: I97582d23ae637b30b1058b9d2b381a869bbebb79 Reviewed-by: hjk --- src/plugins/fakevim/fakevim_test.cpp | 9 +++++++++ src/plugins/fakevim/fakevimhandler.cpp | 10 +++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/plugins/fakevim/fakevim_test.cpp b/src/plugins/fakevim/fakevim_test.cpp index ac92186164c..5a663e1132d 100644 --- a/src/plugins/fakevim/fakevim_test.cpp +++ b/src/plugins/fakevim/fakevim_test.cpp @@ -2291,6 +2291,15 @@ void FakeVimPlugin::test_map() data.setText("abc" N "def"); data.doCommand(QString::fromUtf8("no \xc3\xb8 l|no l k|no k j|no j h")); KEYS(QString::fromUtf8("\xc3\xb8"), "a" X "bc" N "def"); + + // Don't handle mapping in sub-modes that are not followed by movement command. + data.setText("abc" N "def"); + data.doCommand("map Axy z"); + KEYS("", "abc" N "x" X "y z" N "def"); + KEYS("r", "abc" N "x" X " z" N "def"); + KEYS("f", "abc" N "x " X " z" N "def"); + KEYS("t", "abc" N "x " X " z" N "def"); + data.doCommand("unmap "); } void FakeVimPlugin::test_vim_command_cc() diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index a43da4a94d2..91a35db9056 100644 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -2489,7 +2489,15 @@ void FakeVimHandler::Private::endMapping() bool FakeVimHandler::Private::canHandleMapping() { - return m_subsubmode != SearchSubSubMode + // Don't handle user mapping in sub-modes that cannot be followed by movement and in "noremap". + return m_subsubmode == NoSubSubMode + && m_submode != RegisterSubMode + && m_submode != WindowSubMode + && m_submode != ZSubMode + && m_submode != CapitalZSubMode + && m_submode != ReplaceSubMode + && m_submode != MacroRecordSubMode + && m_submode != MacroExecuteSubMode && (g.mapStates.isEmpty() || !g.mapStates.last().noremap); }