summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorhluk <hluk@email.cz>2013-05-14 19:09:57 +0200
committerhjk <hjk121@nokiamail.com>2013-05-31 10:44:09 +0200
commit2fb8590f8763cf321579632b3d3e903d019a0dfc (patch)
tree9ecb57724f4f4b819560cce33becd2d4f0bc384f /src
parent80cef8091022975a571366cf7e4ac69bfb3579ab (diff)
downloadqt-creator-2fb8590f8763cf321579632b3d3e903d019a0dfc.tar.gz
FakeVim: Fix behavior of 'dw' command
Task-number: QTCREATORBUG-9289 Change-Id: I7ac1c925a13df49d60db410dce2d90b02cac7cfd Reviewed-by: hjk <hjk121@nokiamail.com>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/fakevim/fakevim_test.cpp15
-rw-r--r--src/plugins/fakevim/fakevimhandler.cpp7
2 files changed, 21 insertions, 1 deletions
diff --git a/src/plugins/fakevim/fakevim_test.cpp b/src/plugins/fakevim/fakevim_test.cpp
index ae2a7a31c3..0cabd226ac 100644
--- a/src/plugins/fakevim/fakevim_test.cpp
+++ b/src/plugins/fakevim/fakevim_test.cpp
@@ -786,6 +786,21 @@ void FakeVimPlugin::test_vim_delete()
KEYS("\"xd$", X "" N "def");
KEYS("\"xp", "ab" X "c" N "def");
KEYS("2\"xp", "abcabcab" X "c" N "def");
+
+ /* QTCREATORBUG-9289 */
+ data.setText("abc" N "def");
+ KEYS("$" "dw", "a" X "b" N "def");
+ KEYS("dw", X "a" N "def");
+ KEYS("dw", X "" N "def");
+ KEYS("dw", X "def");
+
+ data.setText("abc" N "def ghi");
+ KEYS("2dw", X "ghi");
+
+ data.setText("abc" N X "" N "def");
+ KEYS("dw", "abc" N X "def");
+ KEYS("k$" "dw", "a" X "b" N "def");
+ KEYS("j$h" "dw", "ab" N X "d");
}
void FakeVimPlugin::test_vim_delete_inner_word()
diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp
index b288d73f8a..7bebc74ddc 100644
--- a/src/plugins/fakevim/fakevimhandler.cpp
+++ b/src/plugins/fakevim/fakevimhandler.cpp
@@ -1505,7 +1505,7 @@ public:
bool atBlockStart() const { return m_cursor.atBlockStart(); }
bool atBlockEnd() const { return m_cursor.atBlockEnd(); }
bool atEndOfLine() const { return atBlockEnd() && block().length() > 1; }
- bool atDocumentEnd() const { return position() >= lastPositionInDocument(); }
+ bool atDocumentEnd() const { return position() >= lastPositionInDocument(true); }
bool atDocumentStart() const { return m_cursor.atStart(); }
bool atEmptyLine(const QTextCursor &tc = QTextCursor()) const;
@@ -3507,6 +3507,11 @@ bool FakeVimHandler::Private::handleMovement(const Input &input)
m_movetype = MoveInclusive;
} else {
moveToNextWordStart(count, simple, true);
+ // Command 'dw' deletes to the next word on the same line or to end of line.
+ if (m_submode == DeleteSubMode && count == 1) {
+ const QTextBlock currentBlock = document()->findBlock(anchor());
+ setPosition(qMin(position(), currentBlock.position() + currentBlock.length()));
+ }
m_movetype = MoveExclusive;
}
setTargetColumn();