Rewrite the way to init VimControls

This commit is contained in:
斟酌 鵬兄 2016-03-18 05:32:51 +08:00
parent acb5d72d89
commit e0c50f1bff
4 changed files with 42 additions and 13 deletions

View File

@ -19,24 +19,33 @@
var U = 85; var V = 86; var W = 87; var X = 88; var Y = 89; var U = 85; var V = 86; var W = 87; var X = 88; var Y = 89;
var Z = 90; var Z = 90;
var Controls = function() var Controls = function( vimArea )
{ {
/** @type {Components.Vim.VimArea} */
this.__vimArea = vimArea
this.__keyChains = []; this.__keyChains = [];
}; };
Controls.prototype.__comboG = function( e ) Controls.prototype.__comboG = function( keyCode )
{ {
var keyON = this.__keyChains[ 0 ] == G; var keyON = this.__keyChains[ 0 ] == G;
if( keyON ) if( keyON )
{ {
switch( e.keyCode ) var cursor = this.__vimArea.contentFeeder.cursor;
switch( keyCode )
{ {
case G:
cursor.moveY( -Number.MAX_VALUE );
cursor.moveX( -Number.MAX_VALUE, true );
this.__keyChains = [];
return true;
default: default:
this.__keyChains = []; this.__keyChains = [];
beep();
return true; return true;
} }
} }
else if( e.keyCode == G ) else if( keyCode == G )
{ {
this.__keyChains[ 0 ] = G; this.__keyChains[ 0 ] = G;
return true; return true;
@ -69,14 +78,20 @@
|| ( 112 < e.keyCode && e.keyCode < 124 ) || ( 112 < e.keyCode && e.keyCode < 124 )
) return; ) return;
var vArea = this.__vimArea;
// Action Mode handled by the actions themselves // Action Mode handled by the actions themselves
var cfeeder = sender.contentFeeder; var cfeeder = vArea.contentFeeder;
// Esc OR Ctrl + c // Esc OR Ctrl + c
var Escape = e.keyCode == 27 || ( e.ctrlKey && e.keyCode == 67 ); var Escape = e.keyCode == 27 || ( e.ctrlKey && e.keyCode == 67 );
// Clear the keychains in combo commands // Clear the keychains in combo commands
if( Escape ) this.__keyChains = []; if( Escape && this.__keyChains.length )
{
this.__keyChains = [];
beep();
return;
}
if( cfeeder.cursor.action ) if( cfeeder.cursor.action )
{ {
@ -101,8 +116,8 @@
if( this.__comboKey( kCode ) ) return; if( this.__comboKey( kCode ) ) return;
var cfeeder = sender.contentFeeder; var cfeeder = vArea.contentFeeder;
var sfeeder = sender.statusFeeder; var sfeeder = vArea.statusFeeder;
var ccur = cfeeder.cursor; var ccur = cfeeder.cursor;
@ -167,6 +182,10 @@
case SHIFT + I: // Append before the line start, after spaces case SHIFT + I: // Append before the line start, after spaces
break; break;
case SHIFT + G: // Goto last line
ccur.moveY( Number.MAX_VALUE );
ccur.moveX( Number.MAX_VALUE, true );
break;
// remove characters // remove characters
case X: // Remove in cursor case X: // Remove in cursor
break; break;

View File

@ -149,7 +149,7 @@
this.feeder.dispatcher.dispatchEvent( new BotanEvent( "VisualUpdate" ) ); this.feeder.dispatcher.dispatchEvent( new BotanEvent( "VisualUpdate" ) );
}; };
Cursor.prototype.moveY = function( d ) Cursor.prototype.moveY = function( d, penentrate )
{ {
var Y = this.Y + d; var Y = this.Y + d;
var line; var line;
@ -172,7 +172,7 @@
var lineShift = Y - feeder.moreAt; var lineShift = Y - feeder.moreAt;
var i = 0; var i = 0;
while( true ) while( !feeder.EOF )
{ {
feeder.pan( undefined, lineShift + i ); feeder.pan( undefined, lineShift + i );
@ -196,7 +196,7 @@
line = line.next ) line = line.next )
{ {
if( line.br ) i ++; if( line.br ) i ++;
if( line.lineNum == Y ) break; if( line.lineNum == Y || line.next.placeholder ) break;
} }
this.Y = i; this.Y = i;

View File

@ -144,7 +144,13 @@
f = this.content.indexOf( "\n" ); f = this.content.indexOf( "\n" );
for( i = 1; f != -1 && i < Y; i ++ ) for( i = 1; f != -1 && i < Y; i ++ )
{ {
f = this.content.indexOf( "\n", f + 1 ); var a = this.content.indexOf( "\n", f + 1 );
if( a == -1 )
{
Y = i;
break;
}
f = a;
} }
} }
@ -163,6 +169,10 @@
this.__softRender(); this.__softRender();
}; };
__readOnly( Feeder.prototype, "linesTotal", function() {
return this.content.match( "\n" );
} );
__readOnly( Feeder.prototype, "firstBuffer", function() { __readOnly( Feeder.prototype, "firstBuffer", function() {
return this.lineBuffers[ 0 ]; return this.lineBuffers[ 0 ];
} ); } );

View File

@ -53,7 +53,7 @@
var _self = this; var _self = this;
var controls = new VimControls(); var controls = new VimControls( this );
stage.addEventListener( stage.addEventListener(
"KeyDown" "KeyDown"
, KeyHandler( this, controls.handler.bind( controls ) ) , KeyHandler( this, controls.handler.bind( controls ) )