fakevim: implement `. and '.

Change-Id: Ida402d74ac6cbe41165e491ca7cf3321fdd3004e
Reviewed-by: hjk <qthjk@ovi.com>
This commit is contained in:
hjk
2011-11-28 15:43:57 +01:00
committed by hjk
parent 9df405ba86
commit 794cee7ab0

View File

@@ -1025,6 +1025,7 @@ public:
void recordJump(); void recordJump();
QVector<CursorPosition> m_jumpListUndo; QVector<CursorPosition> m_jumpListUndo;
QVector<CursorPosition> m_jumpListRedo; QVector<CursorPosition> m_jumpListRedo;
int m_lastChangePosition;
QList<QTextEdit::ExtraSelection> m_searchSelections; QList<QTextEdit::ExtraSelection> m_searchSelections;
QTextCursor m_searchCursor; QTextCursor m_searchCursor;
@@ -1123,6 +1124,7 @@ void FakeVimHandler::Private::init()
m_oldExternalAnchor = -1; m_oldExternalAnchor = -1;
m_oldExternalPosition = -1; m_oldExternalPosition = -1;
m_oldPosition = -1; m_oldPosition = -1;
m_lastChangePosition = -1;
setupCharClass(); setupCharClass();
} }
@@ -1905,6 +1907,7 @@ EventResult FakeVimHandler::Private::handleCommandMode(const Input &input)
m_rangemode = RangeLineMode; m_rangemode = RangeLineMode;
} else if (m_submode == ReplaceSubMode) { } else if (m_submode == ReplaceSubMode) {
if (isVisualMode()) { if (isVisualMode()) {
m_lastChangePosition = position();
if (isVisualLineMode()) if (isVisualLineMode())
m_rangemode = RangeLineMode; m_rangemode = RangeLineMode;
else if (isVisualBlockMode()) else if (isVisualBlockMode())
@@ -1918,15 +1921,17 @@ EventResult FakeVimHandler::Private::handleCommandMode(const Input &input)
transformText(range, tr, input.asChar()); transformText(range, tr, input.asChar());
setPosition(range.beginPos); setPosition(range.beginPos);
} else if (count() <= rightDist()) { } else if (count() <= rightDist()) {
m_lastChangePosition = position();
setAnchor(); setAnchor();
moveRight(count()); moveRight(count());
Range range = currentRange();
if (input.isReturn()) { if (input.isReturn()) {
beginEditBlock(); beginEditBlock();
replaceText(currentRange(), QString()); replaceText(range, QString());
insertText(QString("\n")); insertText(QString("\n"));
endEditBlock(); endEditBlock();
} else { } else {
replaceText(currentRange(), QString(count(), input.asChar())); replaceText(range, QString(count(), input.asChar()));
moveLeft(); moveLeft();
} }
setTargetColumn(); setTargetColumn();
@@ -1935,6 +1940,7 @@ EventResult FakeVimHandler::Private::handleCommandMode(const Input &input)
m_submode = NoSubMode; m_submode = NoSubMode;
finishMovement(); finishMovement();
} else if (m_submode == ChangeSubMode && input.is('c')) { // tested } else if (m_submode == ChangeSubMode && input.is('c')) { // tested
m_lastChangePosition = position();
moveToStartOfLine(); moveToStartOfLine();
setAnchor(); setAnchor();
moveDown(count() - 1); moveDown(count() - 1);
@@ -1944,6 +1950,7 @@ EventResult FakeVimHandler::Private::handleCommandMode(const Input &input)
setDotCommand("%1cc", count()); setDotCommand("%1cc", count());
finishMovement(); finishMovement();
} else if (m_submode == DeleteSubMode && input.is('d')) { // tested } else if (m_submode == DeleteSubMode && input.is('d')) { // tested
m_lastChangePosition = position();
m_movetype = MoveLineWise; m_movetype = MoveLineWise;
int endPos = firstPositionInLine(lineForPosition(position()) + count() - 1); int endPos = firstPositionInLine(lineForPosition(position()) + count() - 1);
Range range(position(), endPos, RangeLineMode); Range range(position(), endPos, RangeLineMode);
@@ -1959,18 +1966,21 @@ EventResult FakeVimHandler::Private::handleCommandMode(const Input &input)
m_subsubmode = TextObjectSubSubMode; m_subsubmode = TextObjectSubSubMode;
m_subsubdata = input; m_subsubdata = input;
} else if (m_submode == ShiftLeftSubMode && input.is('<')) { } else if (m_submode == ShiftLeftSubMode && input.is('<')) {
m_lastChangePosition = position();
setAnchor(); setAnchor();
moveDown(count() - 1); moveDown(count() - 1);
m_movetype = MoveLineWise; m_movetype = MoveLineWise;
setDotCommand("%1<<", count()); setDotCommand("%1<<", count());
finishMovement(); finishMovement();
} else if (m_submode == ShiftRightSubMode && input.is('>')) { } else if (m_submode == ShiftRightSubMode && input.is('>')) {
m_lastChangePosition = position();
setAnchor(); setAnchor();
moveDown(count() - 1); moveDown(count() - 1);
m_movetype = MoveLineWise; m_movetype = MoveLineWise;
setDotCommand("%1>>", count()); setDotCommand("%1>>", count());
finishMovement(); finishMovement();
} else if (m_submode == IndentSubMode && input.is('=')) { } else if (m_submode == IndentSubMode && input.is('=')) {
m_lastChangePosition = position();
setAnchor(); setAnchor();
moveDown(count() - 1); moveDown(count() - 1);
m_movetype = MoveLineWise; m_movetype = MoveLineWise;
@@ -4519,6 +4529,7 @@ void FakeVimHandler::Private::insertText(const Register &reg)
qDebug() << "WRONG INSERT MODE: " << reg.rangemode; return); qDebug() << "WRONG INSERT MODE: " << reg.rangemode; return);
setAnchor(); setAnchor();
cursor().insertText(reg.contents); cursor().insertText(reg.contents);
m_lastChangePosition = cursor().position();
//dump("AFTER INSERT"); //dump("AFTER INSERT");
} }
@@ -5002,6 +5013,8 @@ int FakeVimHandler::Private::mark(int code) const
if (code == '>') if (code == '>')
return anchor(); return anchor();
} }
if (code == '.')
return m_lastChangePosition;
QTextCursor tc = m_marks.value(code); QTextCursor tc = m_marks.value(code);
return tc.isNull() ? -1 : tc.position(); return tc.isNull() ? -1 : tc.position();
} }