forked from qt-creator/qt-creator
fakevim: fix 'c$', 'd$', 'y$', 'C', 'D' at end of line
Merge-request: 96 Reviewed-by: hjk <qtc-committer@nokia.com>
This commit is contained in:
@@ -783,10 +783,12 @@ void FakeVimHandler::Private::finishMovement(const QString &dotCommand)
|
|||||||
m_marks['>'] = m_tc.position();
|
m_marks['>'] = m_tc.position();
|
||||||
|
|
||||||
if (m_submode == ChangeSubMode) {
|
if (m_submode == ChangeSubMode) {
|
||||||
|
if (atEndOfLine())
|
||||||
|
moveLeft();
|
||||||
if (m_movetype == MoveInclusive)
|
if (m_movetype == MoveInclusive)
|
||||||
moveRight(); // correction
|
moveRight(); // correction
|
||||||
if (anchor() >= position())
|
if (anchor() >= position())
|
||||||
m_anchor++;
|
m_anchor--;
|
||||||
if (!dotCommand.isEmpty())
|
if (!dotCommand.isEmpty())
|
||||||
setDotCommand("c" + dotCommand);
|
setDotCommand("c" + dotCommand);
|
||||||
//QString text = removeSelectedText();
|
//QString text = removeSelectedText();
|
||||||
@@ -798,11 +800,13 @@ void FakeVimHandler::Private::finishMovement(const QString &dotCommand)
|
|||||||
m_beginEditBlock = false;
|
m_beginEditBlock = false;
|
||||||
m_submode = NoSubMode;
|
m_submode = NoSubMode;
|
||||||
} else if (m_submode == DeleteSubMode) {
|
} else if (m_submode == DeleteSubMode) {
|
||||||
|
if (atEndOfLine())
|
||||||
|
moveLeft();
|
||||||
if (m_rangemode == RangeCharMode) {
|
if (m_rangemode == RangeCharMode) {
|
||||||
if (m_movetype == MoveInclusive)
|
if (m_movetype == MoveInclusive)
|
||||||
moveRight(); // correction
|
moveRight(); // correction
|
||||||
if (anchor() >= position())
|
if (anchor() >= position())
|
||||||
m_anchor++;
|
m_anchor--;
|
||||||
}
|
}
|
||||||
if (!dotCommand.isEmpty())
|
if (!dotCommand.isEmpty())
|
||||||
setDotCommand("d" + dotCommand);
|
setDotCommand("d" + dotCommand);
|
||||||
@@ -1000,14 +1004,10 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
|
|||||||
m_submode = NoSubMode;
|
m_submode = NoSubMode;
|
||||||
m_rangemode = RangeLineMode;
|
m_rangemode = RangeLineMode;
|
||||||
} else if (m_submode == ChangeSubMode && key == 'c') { // tested
|
} else if (m_submode == ChangeSubMode && key == 'c') { // tested
|
||||||
|
moveToStartOfLine();
|
||||||
|
setAnchor();
|
||||||
moveDown(count() - 1);
|
moveDown(count() - 1);
|
||||||
moveToEndOfLine();
|
moveToEndOfLine();
|
||||||
moveLeft();
|
|
||||||
setAnchor();
|
|
||||||
moveToStartOfLine();
|
|
||||||
setTargetColumn();
|
|
||||||
moveUp(count() - 1);
|
|
||||||
m_movetype = MoveLineWise;
|
|
||||||
m_lastInsertion.clear();
|
m_lastInsertion.clear();
|
||||||
setDotCommand("%1cc", count());
|
setDotCommand("%1cc", count());
|
||||||
finishMovement();
|
finishMovement();
|
||||||
@@ -1205,12 +1205,13 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
|
|||||||
setTargetColumn();
|
setTargetColumn();
|
||||||
finishMovement();
|
finishMovement();
|
||||||
} else if (key == '$' || key == Key_End) {
|
} else if (key == '$' || key == Key_End) {
|
||||||
int submode = m_submode;
|
|
||||||
moveToEndOfLine();
|
moveToEndOfLine();
|
||||||
m_movetype = MoveExclusive;
|
m_movetype = MoveInclusive;
|
||||||
setTargetColumn();
|
setTargetColumn();
|
||||||
if (submode == NoSubMode)
|
if (m_submode == NoSubMode)
|
||||||
|
{
|
||||||
m_targetColumn = -1;
|
m_targetColumn = -1;
|
||||||
|
}
|
||||||
finishMovement("$");
|
finishMovement("$");
|
||||||
} else if (key == ',') {
|
} else if (key == ',') {
|
||||||
// FIXME: use some other mechanism
|
// FIXME: use some other mechanism
|
||||||
@@ -1266,6 +1267,8 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
|
|||||||
moveToWordBoundary(true, false);
|
moveToWordBoundary(true, false);
|
||||||
finishMovement();
|
finishMovement();
|
||||||
} else if (key == 'c' && isNoVisualMode()) {
|
} else if (key == 'c' && isNoVisualMode()) {
|
||||||
|
if (atEndOfLine())
|
||||||
|
moveLeft();
|
||||||
setAnchor();
|
setAnchor();
|
||||||
m_submode = ChangeSubMode;
|
m_submode = ChangeSubMode;
|
||||||
} else if (key == 'c' && isVisualCharMode()) {
|
} else if (key == 'c' && isVisualCharMode()) {
|
||||||
@@ -1273,6 +1276,8 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
|
|||||||
m_submode = ChangeSubMode;
|
m_submode = ChangeSubMode;
|
||||||
finishMovement();
|
finishMovement();
|
||||||
} else if (key == 'C') {
|
} else if (key == 'C') {
|
||||||
|
if (atEndOfLine())
|
||||||
|
moveLeft();
|
||||||
setAnchor();
|
setAnchor();
|
||||||
moveToEndOfLine();
|
moveToEndOfLine();
|
||||||
yankSelectedText();
|
yankSelectedText();
|
||||||
@@ -1317,10 +1322,12 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified,
|
|||||||
removeSelectedText();
|
removeSelectedText();
|
||||||
setPosition(qMin(position(), anchor()));
|
setPosition(qMin(position(), anchor()));
|
||||||
} else if (key == 'D' && isNoVisualMode()) {
|
} else if (key == 'D' && isNoVisualMode()) {
|
||||||
|
if (atEndOfLine())
|
||||||
|
moveLeft();
|
||||||
setAnchor();
|
setAnchor();
|
||||||
m_submode = DeleteSubMode;
|
m_submode = DeleteSubMode;
|
||||||
moveDown(qMax(count() - 1, 0));
|
moveDown(qMax(count() - 1, 0));
|
||||||
m_movetype = MoveExclusive;
|
m_movetype = MoveInclusive;
|
||||||
moveToEndOfLine();
|
moveToEndOfLine();
|
||||||
setDotCommand("D");
|
setDotCommand("D");
|
||||||
finishMovement();
|
finishMovement();
|
||||||
|
Reference in New Issue
Block a user