From ccfe1717993de9dd5b69791bc45d9e46961fef75 Mon Sep 17 00:00:00 2001 From: hjk <qtc-committer@nokia.com> Date: Fri, 19 Dec 2008 14:35:57 +0100 Subject: [PATCH] implement 'H' fakevim movement --- src/plugins/fakevim/handler.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/plugins/fakevim/handler.cpp b/src/plugins/fakevim/handler.cpp index b9e36f82740..ed92a3297b2 100644 --- a/src/plugins/fakevim/handler.cpp +++ b/src/plugins/fakevim/handler.cpp @@ -95,6 +95,7 @@ public: int leftDist() const { return m_tc.position() - m_tc.block().position(); } int rightDist() const { return m_tc.block().length() - leftDist() - 1; } bool atEol() const { return m_tc.atBlockEnd() && m_tc.block().length()>1; } + void moveToFirstNonBlankOnLine(); FakeVimHandler *q; Mode m_mode; @@ -285,6 +286,12 @@ void FakeVimHandler::Private::handleCommandMode(int key, const QString &text) ++n; m_tc.movePosition(Left, KeepAnchor, n); finishMovement(); + } else if (key == 'H') { + int firstPos = m_editor->cursorForPosition(QPoint(0, 0)).position(); + m_tc.setPosition(firstPos, KeepAnchor); + m_tc.movePosition(Down, KeepAnchor, qMax(count() - 1, 0)); + moveToFirstNonBlankOnLine(); + finishMovement(); } else if (key == 'i') { m_mode = InsertMode; } else if (key == 'j' || key == Key_Down) { @@ -436,6 +443,18 @@ void FakeVimHandler::Private::search(const QString &needle, bool backwards) m_tc.movePosition(backwards ? Right : Left, MoveAnchor, 1); } +void FakeVimHandler::Private::moveToFirstNonBlankOnLine() +{ + QTextBlock block = m_tc.block(); + QTextDocument *doc = m_tc.document(); + int firstPos = m_tc.position(); + for (int i = firstPos, n = firstPos + block.length(); i < n; ++i) { + if (!doc->characterAt(i).isSpace()) { + m_tc.setPosition(i, KeepAnchor); + return; + } + } +} /////////////////////////////////////////////////////////////////////// // -- GitLab