From f48ff899886bf6d93cd8526ebfaf4d5f6e28ce86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Aum=C3=BCller?= <aumuell@reserv.at> Date: Thu, 21 Jan 2010 17:23:30 +0100 Subject: [PATCH] fakevim: handle forward/backward search depending on initial search ('?'/'/') Merge-request: 97 Reviewed-by: hjk <qtc-committer@nokia.com> --- src/plugins/fakevim/fakevimhandler.cpp | 31 +++++++++++++------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index f23f9b30da8..bf4abb6773d 100644 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -1160,7 +1160,10 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified, } else if (key == '/' || key == '?') { if (hasConfig(ConfigIncSearch)) { // re-use the core dialog. - emit q->findRequested(key == '?'); + m_lastSearchForward = (key == '/'); + emit q->findRequested(!m_lastSearchForward); + m_tc = EDITOR(textCursor()); + m_tc.setPosition(m_tc.selectionStart()); } else { // FIXME: make core find dialog sufficiently flexible to // produce the "default vi" behaviour too. For now, roll our own. @@ -1509,24 +1512,20 @@ EventResult FakeVimHandler::Private::handleCommandMode(int key, int unmodified, m_tc = EDITOR(cursorForPosition(QPoint(0, EDITOR(height()) / 2))); handleStartOfLine(); finishMovement(); - } else if (key == 'n') { // FIXME: see comment for '/' - if (hasConfig(ConfigIncSearch)) - { - emit q->findNextRequested(false); + } else if (key == 'n' || key == 'N') { + bool forward = (key == 'n') ? m_lastSearchForward : !m_lastSearchForward; + if (hasConfig(ConfigIncSearch)) { + int pos = position(); + emit q->findNextRequested(!forward); + if (forward && pos == EDITOR(textCursor()).selectionStart()) { + // if cursor is already positioned at the start of a find result, this is returned + emit q->findNextRequested(false); + } m_tc = EDITOR(textCursor()); - } - else + m_tc.setPosition(m_tc.selectionStart()); + } else search(lastSearchString(), m_lastSearchForward); recordJump(); - } else if (key == 'N') { - if (hasConfig(ConfigIncSearch)) - { - emit q->findNextRequested(true); - m_tc = EDITOR(textCursor()); - } - else - search(lastSearchString(), !m_lastSearchForward); - recordJump(); } else if (key == 'o' || key == 'O') { beginEditBlock(); setDotCommand("%1o", count()); -- GitLab