penguin/AstroJS

Javascript framework for my blog

commit cbec2c747589527be78f9f509e6ad235f45cb4ef

author斟酌 鵬兄 <tgckpg@gmail.com>
date2016-03-14T15:57:17Z
subjectwordwrap panning for k
commit cbec2c747589527be78f9f509e6ad235f45cb4ef
Author: 斟酌 鵬兄 <tgckpg@gmail.com>
Date:   2016-03-14T15:57:17Z

    wordwrap panning for k
---
 botanjs/src/Components/Vim/Cursor.js     | 14 ++++++++++----
 botanjs/src/Components/Vim/LineFeeder.js | 17 ++++++++++++-----
 2 files changed, 22 insertions(+), 9 deletions(-)

diff --git a/botanjs/src/Components/Vim/Cursor.js b/botanjs/src/Components/Vim/Cursor.js
index b9caecf..eba3821 100644
--- a/botanjs/src/Components/Vim/Cursor.js
+++ b/botanjs/src/Components/Vim/Cursor.js
@@ -135,13 +135,19 @@
 
 	Cursor.prototype.moveY = function( d )
 	{
-		var Y = this.Y;
+		var Y = this.Y + d;
 		var line;
 
-		Y += d;
 		if( Y < 0 )
 		{
-			Y = 0;
+			this.feeder.pan( undefined, d );
+
+			this.Y = 0;
+			this.moveX();
+			this.updatePosition();
+
+			this.feeder.softReset();
+			return;
 		}
 		else if( this.feeder.moreAt < Y )
 		{
@@ -186,7 +192,7 @@
 
 			return;
 		}
-		else if ( this.Y < Y )
+		else if ( 0 < d )
 		{
 			// If panning is forward
 			// and next line does not exists
diff --git a/botanjs/src/Components/Vim/LineFeeder.js b/botanjs/src/Components/Vim/LineFeeder.js
index b86f17f..61807a2 100644
--- a/botanjs/src/Components/Vim/LineFeeder.js
+++ b/botanjs/src/Components/Vim/LineFeeder.js
@@ -130,6 +130,7 @@
 		return this.__render( buffs[ start ], this.__rLength );
 	};
 
+	// Performs a line panning
 	Feeder.prototype.pan = function( dX, dY )
 	{
 		if( dX == undefined ) dX = 0;
@@ -140,13 +141,19 @@
 		var X = this.panX + dX;
 		var Y = this.panY + dY;
 
-		var f = this.content.indexOf( "\n" );
-		var i = 1;
+		var f = -1;
+		var i = 0;
+
+		// Y cannot be negative
+		if( Y < 0 ) Y = 0;
 
-		while( f != - 1 && i < Y )
+		if( 0 < Y )
 		{
-			i ++;
-			f = this.content.indexOf( "\n", f + 1 );
+			f = this.content.indexOf( "\n" );
+			for( i = 1; f != - 1 && i < Y; i ++ )
+			{
+				f = this.content.indexOf( "\n", f + 1 );
+			}
 		}
 
 		this.firstBuffer.Push(