FakeVim: Yank wrapped lines with 'Y' an 'yy'

Task-number: QTCREATORBUG-13102
Change-Id: I632dd5113ca8021f67364b92f8f0840e0f15772c
Reviewed-by: hjk <hjk121@nokiamail.com>
This commit is contained in:
Lukas Holecek
2014-10-26 13:49:11 +01:00
committed by hjk
parent 44606a7c0e
commit 7043706212

View File

@@ -1629,14 +1629,14 @@ public:
// return true only if input in current mode and sub-mode was correctly handled
bool handleEscape();
bool handleNoSubMode(const Input &);
bool handleChangeDeleteSubModes(const Input &);
bool handleChangeDeleteYankSubModes(const Input &);
void handleChangeDeleteYankSubModes();
bool handleReplaceSubMode(const Input &);
bool handleFilterSubMode(const Input &);
bool handleRegisterSubMode(const Input &);
bool handleShiftSubMode(const Input &);
bool handleChangeCaseSubMode(const Input &);
bool handleWindowSubMode(const Input &);
bool handleYankSubMode(const Input &);
bool handleZSubMode(const Input &);
bool handleCapitalZSubMode(const Input &);
bool handleMacroRecordSubMode(const Input &);
@@ -4026,8 +4026,10 @@ EventResult FakeVimHandler::Private::handleCommandMode(const Input &input)
handled = handleCommandSubSubMode(input);
} else if (g.submode == NoSubMode) {
handled = handleNoSubMode(input);
} else if (g.submode == ChangeSubMode || g.submode == DeleteSubMode) {
handled = handleChangeDeleteSubModes(input);
} else if (g.submode == ChangeSubMode
|| g.submode == DeleteSubMode
|| g.submode == YankSubMode) {
handled = handleChangeDeleteYankSubModes(input);
} else if (g.submode == ReplaceSubMode) {
handled = handleReplaceSubMode(input);
} else if (g.submode == FilterSubMode) {
@@ -4036,8 +4038,6 @@ EventResult FakeVimHandler::Private::handleCommandMode(const Input &input)
handled = handleRegisterSubMode(input);
} else if (g.submode == WindowSubMode) {
handled = handleWindowSubMode(input);
} else if (g.submode == YankSubMode) {
handled = handleYankSubMode(input);
} else if (g.submode == ZSubMode) {
handled = handleZSubMode(input);
} else if (g.submode == CapitalZSubMode) {
@@ -4437,7 +4437,8 @@ bool FakeVimHandler::Private::handleNoSubMode(const Input &input)
removeText(currentRange());
}
} else if (input.is('Y') && isNoVisualMode()) {
handleYankSubMode(Input(QLatin1Char('y')));
g.submode = YankSubMode;
handleChangeDeleteYankSubModes();
} else if (input.isControl('y')) {
// FIXME: this should use the "scroll" option, and "count"
if (cursorLineOnScreen() == linesOnScreen() - 1)
@@ -4533,28 +4534,39 @@ bool FakeVimHandler::Private::handleNoSubMode(const Input &input)
return handled;
}
bool FakeVimHandler::Private::handleChangeDeleteSubModes(const Input &input)
bool FakeVimHandler::Private::handleChangeDeleteYankSubModes(const Input &input)
{
bool handled = false;
if ((g.submode == ChangeSubMode && input.is('c'))
|| (g.submode == DeleteSubMode && input.is('d'))) {
g.movetype = MoveLineWise;
pushUndoState();
const int anc = firstPositionInLine(cursorLine() + 1);
moveDown(count() - 1);
const int pos = lastPositionInLine(cursorLine() + 1);
setAnchorAndPosition(anc, pos);
if (g.submode == ChangeSubMode)
setDotCommand(_("%1cc"), count());
else
setDotCommand(_("%1dd"), count());
finishMovement();
g.submode = NoSubMode;
handled = true;
|| (g.submode == DeleteSubMode && input.is('d'))
|| (g.submode == YankSubMode && input.is('y')))
{
handleChangeDeleteYankSubModes();
return true;
}
return handled;
return false;
}
void FakeVimHandler::Private::handleChangeDeleteYankSubModes()
{
g.movetype = MoveLineWise;
if (g.submode != YankSubMode)
pushUndoState();
const int anc = firstPositionInLine(cursorLine() + 1);
moveDown(count() - 1);
const int pos = lastPositionInLine(cursorLine() + 1);
setAnchorAndPosition(anc, pos);
if (g.submode == ChangeSubMode)
setDotCommand(_("%1cc"), count());
else if (g.submode == DeleteSubMode)
setDotCommand(_("%1dd"), count());
finishMovement();
g.submode = NoSubMode;
}
bool FakeVimHandler::Private::handleReplaceSubMode(const Input &input)
@@ -4672,20 +4684,6 @@ bool FakeVimHandler::Private::handleWindowSubMode(const Input &input)
return true;
}
bool FakeVimHandler::Private::handleYankSubMode(const Input &input)
{
bool handled = false;
if (input.is('y')) {
g.movetype = MoveLineWise;
int endPos = firstPositionInLine(lineForPosition(position()) + count() - 1);
Range range(position(), endPos, RangeLineMode);
yankText(range, m_register);
g.submode = NoSubMode;
handled = true;
}
return handled;
}
bool FakeVimHandler::Private::handleZSubMode(const Input &input)
{
bool handled = true;