From c93a64c0a5372be87314e9b4fd259a50b98f28bd Mon Sep 17 00:00:00 2001
From: hjk <qtc-committer@nokia.com>
Date: Thu, 29 Apr 2010 15:47:02 +0200
Subject: [PATCH] fakevim: fix cursor positioning in after :!

---
 src/plugins/fakevim/fakevimhandler.cpp | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp
index 17b0f9cbabe..a2155143f44 100644
--- a/src/plugins/fakevim/fakevimhandler.cpp
+++ b/src/plugins/fakevim/fakevimhandler.cpp
@@ -2963,9 +2963,9 @@ bool FakeVimHandler::Private::handleExReadCommand(const QString &line) // :r
     QTextStream ts(&file);
     QString data = ts.readAll();
     m_tc.insertText(data);
+    endEditBlock();
     showBlackMessage(FakeVimHandler::tr("\"%1\" %2L, %3C")
         .arg(m_currentFileName).arg(data.count('\n')).arg(data.size()));
-    endEditBlock();
     return true;
 }
 
@@ -2978,9 +2978,9 @@ bool FakeVimHandler::Private::handleExBangCommand(const QString &line) // :!
         return false;
 
     selectRange(beginLine, endLine);
+    int targetPosition = firstPositionInLine(beginLine);
     QString command = cmd.mid(1).trimmed();
     QString text = selectedText();
-    removeSelectedText();
     QProcess proc;
     proc.start(cmd.mid(1));
     proc.waitForStarted();
@@ -2988,9 +2988,12 @@ bool FakeVimHandler::Private::handleExBangCommand(const QString &line) // :!
     proc.closeWriteChannel();
     proc.waitForFinished();
     QString result = QString::fromUtf8(proc.readAllStandardOutput());
+    beginEditBlock(targetPosition);
+    removeSelectedText();
     m_tc.insertText(result);
+    setPosition(targetPosition);
+    endEditBlock();
     leaveVisualMode();
-    setPosition(firstPositionInLine(beginLine));
     //qDebug() << "FILTER: " << command;
     showBlackMessage(FakeVimHandler::tr("%n lines filtered", 0,
         text.count('\n')));
-- 
GitLab