From f2f0bf5376ac70991eda784a734b29fade668c9b Mon Sep 17 00:00:00 2001 From: hluk Date: Wed, 13 Mar 2013 19:01:22 +0100 Subject: [PATCH] FakeVim: Emulate Vim option "tildeop" ("top") Change-Id: I61a07f5edc0e2a062ca10cb17f489ac3ce113d9f Reviewed-by: hjk --- src/plugins/fakevim/fakevim_test.cpp | 9 +++++++++ src/plugins/fakevim/fakevimactions.cpp | 1 + src/plugins/fakevim/fakevimactions.h | 3 +++ src/plugins/fakevim/fakevimhandler.cpp | 2 +- 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/plugins/fakevim/fakevim_test.cpp b/src/plugins/fakevim/fakevim_test.cpp index 03dabb6f26a..66677ad219e 100644 --- a/src/plugins/fakevim/fakevim_test.cpp +++ b/src/plugins/fakevim/fakevim_test.cpp @@ -1604,6 +1604,9 @@ void FakeVimPlugin::test_vim_letter_case() TestData data; setup(&data); + // set command ~ not to behave as g~ + data.doCommand("set notildeop"); + // upper- and lower-case data.setText("abc DEF"); KEYS("~", "A" X "bc DEF"); @@ -1616,6 +1619,12 @@ void FakeVimPlugin::test_vim_letter_case() KEYS(".", "aBC de" X "F" N "ghi"); KEYS("h.", "aBC dE" X "f" N "ghi"); + // set command ~ to behave as g~ + data.doCommand("set tildeop"); + + data.setText("abc DEF" N "ghi JKL"); + KEYS("ll~j", "ABC def" N "GHI jkl"); + data.setText("abc DEF"); KEYS("lv3l~", "a" X "BC dEF"); KEYS("v4lU", "a" X "BC DEF"); diff --git a/src/plugins/fakevim/fakevimactions.cpp b/src/plugins/fakevim/fakevimactions.cpp index 6e0426b04db..4432e8d1b80 100644 --- a/src/plugins/fakevim/fakevimactions.cpp +++ b/src/plugins/fakevim/fakevimactions.cpp @@ -195,6 +195,7 @@ FakeVimSettings *theFakeVimSettings() createAction(s, ConfigSmartCase, false, _("SmartCase"), _("scs")); createAction(s, ConfigIgnoreCase, false, _("IgnoreCase"), _("ic")); createAction(s, ConfigWrapScan, true, _("WrapScan"), _("ws")); + createAction(s, ConfigTildeOp, false, _("TildeOp"), _("top")); createAction(s, ConfigShowCmd, true, _("ShowCmd"), _("sc")); createAction(s, ConfigScrollOff, 0, _("ScrollOff"), _("so")); createAction(s, ConfigBackspace, _("indent,eol,start"), _("ConfigBackspace"), _("bs")); diff --git a/src/plugins/fakevim/fakevimactions.h b/src/plugins/fakevim/fakevimactions.h index 2ff3790edfb..50471014fb6 100644 --- a/src/plugins/fakevim/fakevimactions.h +++ b/src/plugins/fakevim/fakevimactions.h @@ -78,6 +78,9 @@ enum FakeVimSettingsCode ConfigIgnoreCase, ConfigWrapScan, + // command ~ behaves as g~ + ConfigTildeOp, + // indent allow backspacing over autoindent // eol allow backspacing over line breaks (join lines) // start allow backspacing over the start of insert; CTRL-W and CTRL-U diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index b37747a3d75..dd251c9243c 100644 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -3826,7 +3826,7 @@ bool FakeVimHandler::Private::handleNoSubMode(const Input &input) else if (input.is('U')) m_submode = UpCaseSubMode; finishMovement(); - } else if (m_gflag) { + } else if (m_gflag || (input.is('~') && hasConfig(ConfigTildeOp))) { setUndoPosition(); if (atEndOfLine()) moveLeft();