forked from qt-creator/qt-creator
fakevim: Paragraph movement using '{' and '}'
Change-Id: Ie156438b6633b7e9680e028fca7eca1b8788a63d Reviewed-by: hjk <qthjk@ovi.com>
This commit is contained in:
@@ -383,6 +383,25 @@ void FakeVimPlugin::test_vim_movement()
|
|||||||
KEYS("A", "abc def" X N "ghi");
|
KEYS("A", "abc def" X N "ghi");
|
||||||
data.setText("abc def" N "ghi");
|
data.setText("abc def" N "ghi");
|
||||||
KEYS("$a", "abc def" X N "ghi");
|
KEYS("$a", "abc def" X N "ghi");
|
||||||
|
|
||||||
|
// paragraph movement
|
||||||
|
data.setText("abc" N N "def");
|
||||||
|
KEYS("}", "abc" N X N "def");
|
||||||
|
KEYS("}", "abc" N N "de" X "f");
|
||||||
|
KEYS("{", "abc" N X N "def");
|
||||||
|
KEYS("{", X "abc" N N "def");
|
||||||
|
|
||||||
|
data.setText("abc" N N N N "def");
|
||||||
|
KEYS("}", "abc" N X N N N "def");
|
||||||
|
KEYS("}", "abc" N N N N "de" X "f");
|
||||||
|
KEYS("3{", "abc" N N N N "de" X "f");
|
||||||
|
KEYS("{", "abc" N N N X N "def");
|
||||||
|
KEYS("{", X "abc" N N N N "def");
|
||||||
|
KEYS("3}", X "abc" N N N N "def");
|
||||||
|
|
||||||
|
data.setText("abc def");
|
||||||
|
KEYS("}", "abc de" X "f");
|
||||||
|
KEYS("{", X "abc def");
|
||||||
}
|
}
|
||||||
|
|
||||||
void FakeVimPlugin::test_vim_insert()
|
void FakeVimPlugin::test_vim_insert()
|
||||||
|
|||||||
@@ -1530,6 +1530,9 @@ public:
|
|||||||
EDITOR(setTextCursor(tc));
|
EDITOR(setTextCursor(tc));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool moveToPreviousParagraph(int count) { return moveToNextParagraph(-count); }
|
||||||
|
bool moveToNextParagraph(int count);
|
||||||
|
|
||||||
bool handleFfTt(QString key);
|
bool handleFfTt(QString key);
|
||||||
|
|
||||||
void enterInsertMode();
|
void enterInsertMode();
|
||||||
@@ -2450,6 +2453,37 @@ void FakeVimHandler::Private::moveDown(int n)
|
|||||||
moveToTargetColumn();
|
moveToTargetColumn();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool FakeVimHandler::Private::moveToNextParagraph(int count)
|
||||||
|
{
|
||||||
|
const bool forward = count > 0;
|
||||||
|
int repeat = forward ? count : -count;
|
||||||
|
QTextBlock block = this->block();
|
||||||
|
|
||||||
|
if (block.isValid() && block.length() == 1)
|
||||||
|
++repeat;
|
||||||
|
|
||||||
|
for (; block.isValid(); block = forward ? block.next() : block.previous()) {
|
||||||
|
if (block.length() == 1) {
|
||||||
|
if (--repeat == 0)
|
||||||
|
break;
|
||||||
|
while (block.isValid() && block.length() == 1)
|
||||||
|
block = forward ? block.next() : block.previous();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (repeat == 0)
|
||||||
|
setPosition(block.position());
|
||||||
|
else if (repeat == 1)
|
||||||
|
setPosition(forward ? lastPositionInDocument() : 0);
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
|
||||||
|
setTargetColumn();
|
||||||
|
m_movetype = MoveExclusive;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void FakeVimHandler::Private::moveToEndOfLine()
|
void FakeVimHandler::Private::moveToEndOfLine()
|
||||||
{
|
{
|
||||||
// Additionally select (in visual mode) or apply current command on hidden lines following
|
// Additionally select (in visual mode) or apply current command on hidden lines following
|
||||||
@@ -2986,6 +3020,10 @@ bool FakeVimHandler::Private::handleMovement(const Input &input)
|
|||||||
moveToStartOfLine();
|
moveToStartOfLine();
|
||||||
moveRight(qMin(count, rightDist()) - 1);
|
moveRight(qMin(count, rightDist()) - 1);
|
||||||
setTargetColumn();
|
setTargetColumn();
|
||||||
|
} else if (input.is('}')) {
|
||||||
|
handled = moveToNextParagraph(count);
|
||||||
|
} else if (input.is('{')) {
|
||||||
|
handled = moveToPreviousParagraph(count);
|
||||||
} else if (input.isReturn()) {
|
} else if (input.isReturn()) {
|
||||||
moveToStartOfLine();
|
moveToStartOfLine();
|
||||||
moveDown();
|
moveDown();
|
||||||
|
|||||||
Reference in New Issue
Block a user