summaryrefslogtreecommitdiff
path: root/src/plugins/fakevim
diff options
context:
space:
mode:
authorhjk <qtc-committer@nokia.com>2011-11-28 15:43:57 +0100
committerhjk <qthjk@ovi.com>2011-11-28 16:06:57 +0100
commit794cee7ab05986444753dea53c9941c128fcaf0a (patch)
tree96cb9f313aa0ebe20fd8d215f6de9ecb81e28a64 /src/plugins/fakevim
parent9df405ba86b56038d3ac4662161f653bf44a17d7 (diff)
downloadqt-creator-794cee7ab05986444753dea53c9941c128fcaf0a.tar.gz
fakevim: implement `. and '.
Change-Id: Ida402d74ac6cbe41165e491ca7cf3321fdd3004e Reviewed-by: hjk <qthjk@ovi.com>
Diffstat (limited to 'src/plugins/fakevim')
-rw-r--r--src/plugins/fakevim/fakevimhandler.cpp17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp
index 387d9b7989..95c321d3d7 100644
--- a/src/plugins/fakevim/fakevimhandler.cpp
+++ b/src/plugins/fakevim/fakevimhandler.cpp
@@ -1025,6 +1025,7 @@ public:
void recordJump();
QVector<CursorPosition> m_jumpListUndo;
QVector<CursorPosition> m_jumpListRedo;
+ int m_lastChangePosition;
QList<QTextEdit::ExtraSelection> m_searchSelections;
QTextCursor m_searchCursor;
@@ -1123,6 +1124,7 @@ void FakeVimHandler::Private::init()
m_oldExternalAnchor = -1;
m_oldExternalPosition = -1;
m_oldPosition = -1;
+ m_lastChangePosition = -1;
setupCharClass();
}
@@ -1905,6 +1907,7 @@ EventResult FakeVimHandler::Private::handleCommandMode(const Input &input)
m_rangemode = RangeLineMode;
} else if (m_submode == ReplaceSubMode) {
if (isVisualMode()) {
+ m_lastChangePosition = position();
if (isVisualLineMode())
m_rangemode = RangeLineMode;
else if (isVisualBlockMode())
@@ -1918,15 +1921,17 @@ EventResult FakeVimHandler::Private::handleCommandMode(const Input &input)
transformText(range, tr, input.asChar());
setPosition(range.beginPos);
} else if (count() <= rightDist()) {
+ m_lastChangePosition = position();
setAnchor();
moveRight(count());
+ Range range = currentRange();
if (input.isReturn()) {
beginEditBlock();
- replaceText(currentRange(), QString());
+ replaceText(range, QString());
insertText(QString("\n"));
endEditBlock();
} else {
- replaceText(currentRange(), QString(count(), input.asChar()));
+ replaceText(range, QString(count(), input.asChar()));
moveLeft();
}
setTargetColumn();
@@ -1935,6 +1940,7 @@ EventResult FakeVimHandler::Private::handleCommandMode(const Input &input)
m_submode = NoSubMode;
finishMovement();
} else if (m_submode == ChangeSubMode && input.is('c')) { // tested
+ m_lastChangePosition = position();
moveToStartOfLine();
setAnchor();
moveDown(count() - 1);
@@ -1944,6 +1950,7 @@ EventResult FakeVimHandler::Private::handleCommandMode(const Input &input)
setDotCommand("%1cc", count());
finishMovement();
} else if (m_submode == DeleteSubMode && input.is('d')) { // tested
+ m_lastChangePosition = position();
m_movetype = MoveLineWise;
int endPos = firstPositionInLine(lineForPosition(position()) + count() - 1);
Range range(position(), endPos, RangeLineMode);
@@ -1959,18 +1966,21 @@ EventResult FakeVimHandler::Private::handleCommandMode(const Input &input)
m_subsubmode = TextObjectSubSubMode;
m_subsubdata = input;
} else if (m_submode == ShiftLeftSubMode && input.is('<')) {
+ m_lastChangePosition = position();
setAnchor();
moveDown(count() - 1);
m_movetype = MoveLineWise;
setDotCommand("%1<<", count());
finishMovement();
} else if (m_submode == ShiftRightSubMode && input.is('>')) {
+ m_lastChangePosition = position();
setAnchor();
moveDown(count() - 1);
m_movetype = MoveLineWise;
setDotCommand("%1>>", count());
finishMovement();
} else if (m_submode == IndentSubMode && input.is('=')) {
+ m_lastChangePosition = position();
setAnchor();
moveDown(count() - 1);
m_movetype = MoveLineWise;
@@ -4519,6 +4529,7 @@ void FakeVimHandler::Private::insertText(const Register &reg)
qDebug() << "WRONG INSERT MODE: " << reg.rangemode; return);
setAnchor();
cursor().insertText(reg.contents);
+ m_lastChangePosition = cursor().position();
//dump("AFTER INSERT");
}
@@ -5002,6 +5013,8 @@ int FakeVimHandler::Private::mark(int code) const
if (code == '>')
return anchor();
}
+ if (code == '.')
+ return m_lastChangePosition;
QTextCursor tc = m_marks.value(code);
return tc.isNull() ? -1 : tc.position();
}