penguin/AstroJS

Javascript framework for my blog

commit 8c5f50ec2cd75ba452a4171361fb6516ce49e423

author斟酌 鵬兄 <tgckpg@gmail.com>
date2016-03-30T20:34:08Z
subjectBug fix for Ctrl + b/f
commit 8c5f50ec2cd75ba452a4171361fb6516ce49e423
Author: 斟酌 鵬兄 <tgckpg@gmail.com>
Date:   2016-03-30T20:34:08Z

    Bug fix for Ctrl + b/f
---
 botanjs/src/Components/Vim/Controls.js   | 10 +++++++---
 botanjs/src/Components/Vim/LineFeeder.js | 10 +++++-----
 botanjs/src/Components/Vim/VimArea.js    |  2 +-
 3 files changed, 13 insertions(+), 9 deletions(-)

diff --git a/botanjs/src/Components/Vim/Controls.js b/botanjs/src/Components/Vim/Controls.js
index 950ddbc..e6f529a 100644
--- a/botanjs/src/Components/Vim/Controls.js
+++ b/botanjs/src/Components/Vim/Controls.js
@@ -270,14 +270,16 @@
 			case J: this.__cMoveY( 1 ); break; // Down
 
 			case CTRL + F: // Page Down
-				if( cfeeder.firstBuffer.next.placeholder )
+				if( cfeeder.firstBuffer.nextLine.placeholder )
 				{
 					beep();
 					break;
 				}
 
 				var oPan = cfeeder.panY;
-				cfeeder.pan( undefined, vima.rows - 1 );
+				cfeeder.pan( undefined, cfeeder.moreAt );
+				cfeeder.softReset();
+
 				ccur.moveY( -ccur.Y );
 
 				break;
@@ -287,7 +289,9 @@
 					beep();
 					break;
 				}
-				cfeeder.pan( undefined, -vima.rows + 1 );
+				cfeeder.pan( undefined, -cfeeder.moreAt );
+				cfeeder.softReset();
+
 				ccur.moveY( -ccur.Y );
 				if( !cfeeder.EOF ) ccur.moveY( cfeeder.moreAt );
 				break;
diff --git a/botanjs/src/Components/Vim/LineFeeder.js b/botanjs/src/Components/Vim/LineFeeder.js
index b27779f..1385ee8 100644
--- a/botanjs/src/Components/Vim/LineFeeder.js
+++ b/botanjs/src/Components/Vim/LineFeeder.js
@@ -141,17 +141,17 @@
 		// Y cannot be negative
 		if( Y < 0 ) Y = 0;
 
+		// Compensate the last "\n" content placeholder
+		var cont = this.content.slice( 0, -1 );
 		if( 0 < Y )
 		{
-			f = this.content.indexOf( "\n" );
+			f = cont.indexOf( "\n" );
 			for( i = 1; f != -1 && i < Y; i ++ )
 			{
-				var a = this.content.indexOf( "\n", f + 1 );
+				var a = cont.indexOf( "\n", f + 1 );
 				if( a == -1 )
 				{
-					Y = i - 1;
-					// -2 to compensate the last "\n" content placeholder
-					f -= 2;
+					Y = i;
 					break;
 				}
 				f = a;
diff --git a/botanjs/src/Components/Vim/VimArea.js b/botanjs/src/Components/Vim/VimArea.js
index 116bd46..95b02c6 100644
--- a/botanjs/src/Components/Vim/VimArea.js
+++ b/botanjs/src/Components/Vim/VimArea.js
@@ -104,7 +104,7 @@
 		cfeeder.init( content + "\n" );
 
 		// Status can consumes up to full screen, I think
-		sfeeder = new LineFeeder( r, c );
+		var sfeeder = new LineFeeder( r, c );
 		sfeeder.setRender( false );
 
 		// Set the Vim instance