FakeVim: Break edit block only after a change

Change-Id: Ice885d3a51d0c5516ddabe8a8bdb9b1ce5ab7a06
Reviewed-by: hjk <hjk121@nokiamail.com>
This commit is contained in:
hluk
2013-04-24 20:28:24 +02:00
committed by hjk
parent 016a926ab7
commit e245f2d5f9

View File

@@ -4368,6 +4368,7 @@ EventResult FakeVimHandler::Private::handleInsertMode(const Input &input)
if (input.isEscape()) { if (input.isEscape()) {
// Repeat insertion [count] times. // Repeat insertion [count] times.
// One instance was already physically inserted while typing. // One instance was already physically inserted while typing.
if (!m_lastInsertion.isEmpty()) {
const QString text = m_lastInsertion; const QString text = m_lastInsertion;
const int repeat = count(); const int repeat = count();
m_lastInsertion.clear(); m_lastInsertion.clear();
@@ -4377,7 +4378,8 @@ EventResult FakeVimHandler::Private::handleInsertMode(const Input &input)
if (m_visualBlockInsert && !text.contains(QLatin1Char('\n'))) { if (m_visualBlockInsert && !text.contains(QLatin1Char('\n'))) {
const CursorPosition lastAnchor = mark(QLatin1Char('<')).position; const CursorPosition lastAnchor = mark(QLatin1Char('<')).position;
const CursorPosition lastPosition = mark(QLatin1Char('>')).position; const CursorPosition lastPosition = mark(QLatin1Char('>')).position;
CursorPosition startPos(lastAnchor.line, qMin(lastPosition.column, lastAnchor.column)); CursorPosition startPos(lastAnchor.line,
qMin(lastPosition.column, lastAnchor.column));
CursorPosition pos = startPos; CursorPosition pos = startPos;
if (g.dotCommand.endsWith(QLatin1Char('A'))) if (g.dotCommand.endsWith(QLatin1Char('A')))
pos.column = qMax(lastPosition.column, lastAnchor.column) + 1; pos.column = qMax(lastPosition.column, lastAnchor.column) + 1;
@@ -4395,17 +4397,20 @@ EventResult FakeVimHandler::Private::handleInsertMode(const Input &input)
setCursorPosition(startPos); setCursorPosition(startPos);
} else { } else {
moveLeft(qMin(1, leftDist())); moveLeft(qMin(1, leftDist()));
leaveVisualMode(); // TODO: Remove! Should not be requiered here!
} }
endEditBlock(); endEditBlock();
breakEditBlock(); breakEditBlock();
m_lastInsertion = text; m_lastInsertion = text;
// If command is 'o' or 'O' don't include the first line feed in dot command. // If command is 'o' or 'O' don't include the first line feed in dot command.
if (g.dotCommand.endsWith(QLatin1Char('o'), Qt::CaseInsensitive)) if (g.dotCommand.endsWith(QLatin1Char('o'), Qt::CaseInsensitive))
m_lastInsertion.remove(0, 1); m_lastInsertion.remove(0, 1);
g.dotCommand += m_lastInsertion + _("<ESC>"); g.dotCommand += m_lastInsertion + _("<ESC>");
} else {
moveLeft(qMin(1, leftDist()));
}
enterCommandMode(); enterCommandMode();
setTargetColumn(); setTargetColumn();
m_ctrlVActive = false; m_ctrlVActive = false;