From a7cf72a945193124eb2d502652a8f491707ca9c4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20Aum=C3=BCller?= <aumuell@reserv.at>
Date: Fri, 19 Feb 2010 13:01:38 +0100
Subject: [PATCH] fakevim: improved 'startofline' behaviour for indenting and
 shifting left/right

Merge-request: 113
Reviewed-by: hjk <qtc-committer@nokia.com>
---
 src/plugins/fakevim/fakevimhandler.cpp | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp
index e84c6f61acd..6f2f03ebc52 100644
--- a/src/plugins/fakevim/fakevimhandler.cpp
+++ b/src/plugins/fakevim/fakevimhandler.cpp
@@ -2657,6 +2657,7 @@ void FakeVimHandler::Private::moveToFirstNonBlankOnLine()
 
 void FakeVimHandler::Private::indentSelectedText(QChar typedChar)
 {
+    setTargetColumn();
     int beginLine = qMin(lineForPosition(position()), lineForPosition(anchor()));
     int endLine = qMax(lineForPosition(position()), lineForPosition(anchor()));
 
@@ -2665,7 +2666,8 @@ void FakeVimHandler::Private::indentSelectedText(QChar typedChar)
     indentText(range, typedChar);
 
     setPosition(firstPositionInLine(beginLine));
-    moveToFirstNonBlankOnLine();
+    moveToTargetColumn();
+    handleStartOfLine();
     setTargetColumn();
     setDotCommand("%1==", endLine - beginLine + 1);
 }
@@ -2693,6 +2695,7 @@ bool FakeVimHandler::Private::isElectricCharacter(QChar c) const
 
 void FakeVimHandler::Private::shiftRegionRight(int repeat)
 {
+    setTargetColumn();
     int beginLine = lineForPosition(anchor());
     int endLine = lineForPosition(position());
     if (beginLine > endLine)
@@ -2709,13 +2712,15 @@ void FakeVimHandler::Private::shiftRegionRight(int repeat)
     endEditBlock();
 
     setPosition(firstPos);
-    moveToFirstNonBlankOnLine();
+    moveToTargetColumn();
+    handleStartOfLine();
     setTargetColumn();
     setDotCommand("%1>>", endLine - beginLine + 1);
 }
 
 void FakeVimHandler::Private::shiftRegionLeft(int repeat)
 {
+    setTargetColumn();
     int beginLine = lineForPosition(anchor());
     int endLine = lineForPosition(position());
     if (beginLine > endLine)
@@ -2744,7 +2749,8 @@ void FakeVimHandler::Private::shiftRegionLeft(int repeat)
     endEditBlock();
 
     setPosition(firstPos);
-    moveToFirstNonBlankOnLine();
+    moveToTargetColumn();
+    handleStartOfLine();
     setTargetColumn();
     setDotCommand("%1<<", endLine - beginLine + 1);
 }
-- 
GitLab