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