G / gg commands

This commit is contained in:
斟酌 鵬兄 2016-03-18 05:55:04 +08:00
parent e0c50f1bff
commit f227c7e16b
3 changed files with 38 additions and 18 deletions

View File

@ -168,13 +168,28 @@
else if( this.feeder.moreAt < Y ) else if( this.feeder.moreAt < Y )
{ {
var feeder = this.feeder; var feeder = this.feeder;
var i = 0;
if( penentrate )
{
feeder.pan( undefined, Y - moreAt );
}
else if( feeder.linesTotal < Y )
{
while( !feeder.EOF )
{
feeder.pan( undefined, 1 );
}
}
else
{
var lastLine = feeder.lastBuffer.lineNum; var lastLine = feeder.lastBuffer.lineNum;
var lineShift = Y - feeder.moreAt; var lineShift = Y - feeder.moreAt;
var i = 0; i = lineShift;
while( !feeder.EOF ) while( !feeder.EOF )
{ {
feeder.pan( undefined, lineShift + i ); feeder.pan( undefined, i );
// if it turns out to be the same line // if it turns out to be the same line
// before after panning // before after panning
@ -189,8 +204,9 @@
// The line number cursor need to be in // The line number cursor need to be in
Y = lastLine + lineShift; Y = lastLine + lineShift;
}
// Calculate the visual line position // Calculate the visual line position "i"
for( i = 0, line = feeder.firstBuffer; for( i = 0, line = feeder.firstBuffer;
line != feeder.lastBuffer; line != feeder.lastBuffer;
line = line.next ) line = line.next )

View File

@ -9,6 +9,8 @@
/** @type {Components.Vim.Cursor} */ /** @type {Components.Vim.Cursor} */
var Cursor = ns[ NS_INVOKE ]( "Cursor" ); var Cursor = ns[ NS_INVOKE ]( "Cursor" );
var occurence = __import( "System.utils.Perf.CountSubstr" );
var Feeder = function( rows, cols ) var Feeder = function( rows, cols )
{ {
var lineBuffers = []; var lineBuffers = [];
@ -170,7 +172,7 @@
}; };
__readOnly( Feeder.prototype, "linesTotal", function() { __readOnly( Feeder.prototype, "linesTotal", function() {
return this.content.match( "\n" ); return occurence( this.content, "\n" );
} ); } );
__readOnly( Feeder.prototype, "firstBuffer", function() { __readOnly( Feeder.prototype, "firstBuffer", function() {

View File

@ -37,6 +37,8 @@ Components.Vim.LineFeeder.panY;
/** @type Number */ /** @type Number */
Components.Vim.LineFeeder.moreAt; Components.Vim.LineFeeder.moreAt;
/** @type Number */ /** @type Number */
Components.Vim.LineFeeder.linesTotal;
/** @type Number */
Components.Vim.LineFeeder.linesOccupied; Components.Vim.LineFeeder.linesOccupied;
/** @type String */ /** @type String */
Components.Vim.LineFeeder.docPos; Components.Vim.LineFeeder.docPos;