forked from Botanical/BotanJS
fixed G / gg issue on some cases
This commit is contained in:
parent
f227c7e16b
commit
b17ca21420
@ -55,6 +55,25 @@
|
|||||||
return offset;
|
return offset;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Rush cursor to wanted position "d" then get the actual position
|
||||||
|
var GetRushPos = function( c, d )
|
||||||
|
{
|
||||||
|
var line = c.getLine();
|
||||||
|
var l = c.Y + d;
|
||||||
|
var i = c.Y;
|
||||||
|
|
||||||
|
// First line ( visual ) does not count
|
||||||
|
if( line != c.feeder.firstBuffer ) i --;
|
||||||
|
|
||||||
|
for( ; i < l; line = line.nextLine )
|
||||||
|
{
|
||||||
|
if( line.placeholder ) break;
|
||||||
|
if( line.br ) i ++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return i;
|
||||||
|
};
|
||||||
|
|
||||||
var Cursor = function( feeder )
|
var Cursor = function( feeder )
|
||||||
{
|
{
|
||||||
/** @type {Components.Vim.LineFeeder} */
|
/** @type {Components.Vim.LineFeeder} */
|
||||||
@ -151,24 +170,26 @@
|
|||||||
|
|
||||||
Cursor.prototype.moveY = function( d, penentrate )
|
Cursor.prototype.moveY = function( d, penentrate )
|
||||||
{
|
{
|
||||||
|
var i;
|
||||||
var Y = this.Y + d;
|
var Y = this.Y + d;
|
||||||
|
var feeder = this.feeder;
|
||||||
var line;
|
var line;
|
||||||
|
|
||||||
if( Y < 0 )
|
if( Y < 0 )
|
||||||
{
|
{
|
||||||
this.feeder.pan( undefined, d );
|
feeder.pan( undefined, d );
|
||||||
|
|
||||||
this.Y = 0;
|
this.Y = 0;
|
||||||
this.moveX();
|
this.moveX();
|
||||||
this.updatePosition();
|
this.updatePosition();
|
||||||
|
|
||||||
this.feeder.softReset();
|
feeder.softReset();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if( this.feeder.moreAt < Y )
|
// More at bottom, start panning
|
||||||
|
else if( !feeder.EOF && feeder.moreAt < Y )
|
||||||
{
|
{
|
||||||
var feeder = this.feeder;
|
var feeder = this.feeder;
|
||||||
var i = 0;
|
|
||||||
|
|
||||||
if( penentrate )
|
if( penentrate )
|
||||||
{
|
{
|
||||||
@ -180,6 +201,8 @@
|
|||||||
{
|
{
|
||||||
feeder.pan( undefined, 1 );
|
feeder.pan( undefined, 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
i = GetRushPos( this, d );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -204,7 +227,6 @@
|
|||||||
|
|
||||||
// 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 "i"
|
// Calculate the visual line position "i"
|
||||||
for( i = 0, line = feeder.firstBuffer;
|
for( i = 0, line = feeder.firstBuffer;
|
||||||
@ -215,25 +237,25 @@
|
|||||||
if( line.lineNum == Y || line.next.placeholder ) break;
|
if( line.lineNum == Y || line.next.placeholder ) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
this.Y = i;
|
this.Y = i;
|
||||||
// Keep original position after panning
|
// Keep original position after panning
|
||||||
this.moveX();
|
this.moveX();
|
||||||
this.updatePosition();
|
this.updatePosition();
|
||||||
|
|
||||||
|
// Because it is panned, soft reset is needed
|
||||||
feeder.softReset();
|
feeder.softReset();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if ( 0 < d )
|
else if ( 0 < d )
|
||||||
{
|
{
|
||||||
// If panning is forward
|
var line = this.getLine();
|
||||||
// and next line does not exists
|
// If already at bottom
|
||||||
line = this.getLine().nextLine;
|
if( line.nextLine.placeholder ) return;
|
||||||
if( !line || line.placeholder )
|
|
||||||
{
|
Y = GetRushPos( this, d );
|
||||||
// do nothing
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.Y = Y;
|
this.Y = Y;
|
||||||
|
Loading…
Reference in New Issue
Block a user