Some navigation, but not working:(

This commit is contained in:
2016-03-13 08:35:29 +08:00
parent 6ce714be1e
commit 751530b42d
5 changed files with 356 additions and 138 deletions
+62 -38
View File
@@ -14,8 +14,9 @@
/** @type {System.Debug} */
var debug = __import( "System.Debug" );
/** @type {Components.VimArea.LineFeeder} */
/** @type {Components.Vim.LineFeeder} */
var LineFeeder = ns[ NS_INVOKE ]( "LineFeeder" );
/** @type {Components.Vim.StatusBar} */
var StatusBar = ns[ NS_INVOKE ]( "StatusBar" );
var KeyHandler = function( sender, handler )
@@ -32,6 +33,11 @@
var VimControls = function( sender, e )
{
if( e.altKey
// F2 - F12
|| ( 112 < e.keyCode && e.keyCode < 124 )
) return;
e.preventDefault();
if( e.ctrlKey )
{
@@ -39,28 +45,49 @@
return;
}
var kCode = e.KeyCode + ( e.shiftKey ? 1000 : 0 );
switch( e.KeyCode )
var kCode = e.keyCode + ( e.shiftKey ? 1000 : 0 );
var cfeeder = sender.contentFeeder;
switch( kCode )
{
// Cursor movements
case 72: // h
cfeeder.cursor.moveX( -1 );
break;
case 74: // j
cfeeder.cursor.moveY( 1 );
break;
case 75: // k
cfeeder.cursor.moveY( -1 );
break;
case 76: // l
cfeeder.cursor.moveX( 1 );
break;
case 65: // a
case 1065: // A
break;
case 72: // h
case 1072: // H
case 1072: // H, First line buffer
break;
case 74: // j
case 1074: // J
case 1076: // L, Last line buffer
break;
case 75: // k
case 1075: // K
break;
case 76: // l
case 1076: // L
case 1052: // $
cfeeder.cursor.lineEnd();
break;
case 1053: // %
case 1054: // ^
break;
case 1054: // ^
cfeeder.cursor.lineStart();
break;
case 1074: // J, Join lines
break;
case 1075: // K, manual entry
break;
case 112: // F1, help
}
sender.__blink = false;
sender.select( cfeeder.cursor.position );
};
/* stage @param {Dandelion.IDOMElement} */
@@ -94,31 +121,23 @@
VimArea.prototype.startInput = function( mode )
{
};
VimArea.prototype.cursor = function( x, y )
VimArea.prototype.select = function( sel )
{
return this.__cursor();
};
VimArea.prototype.flashCursor = function()
{
var _self = this;
var textarea = this.stage.element;
Cycle.perma( "VimCursorFlashCycle", function()
if( sel )
{
var cursor = _self.cursor();
if( cursor )
{
textarea.selectionStart = cursor.start;
textarea.selectionEnd = cursor.end;
}
}, 600 );
textarea.selectionStart = sel.start;
textarea.selectionEnd = sel.end;
}
};
VimArea.prototype.VisualizeVimFrame = function()
{
var _self = this;
var element = this.stage.element;
var r = this.rows;
var c = this.cols;
@@ -132,6 +151,7 @@
sfeeder = new LineFeeder( r, c );
sfeeder.setRender( false );
// XXX: Placeholder
var statusBar = new StatusBar( c );
statusBar.stamp( -18, function(){
return "1,1-1";
@@ -143,20 +163,24 @@
sfeeder.init( statusBar.statusText );
element.value = cfeeder.render( 0, r - sfeeder.linesOccupied ) + "\n" + sfeeder.render();
element.value =
cfeeder.render( 0, r - sfeeder.linesOccupied )
+ "\n" + sfeeder.render();
this.contentFeeder = cfeeder;
this.statusFeeder = sfeeder;
var f = true;
this.__cursor = function()
{
if( f = !f )
return this.contentFeeder.cursor( 0 );
else return { start: 0, end: 0 };
}
this.__cursor = cfeeder.cursor;
this.flashCursor();
this.__blink = true;
Cycle.perma( "VimCursorBlinkCycle" + element.id, function()
{
_self.select(
( _self.__blink = !_self.__blink )
? _self.__cursor.position
: { start: 0, end: 0 }
);
}, 600 );
};
ns[ NS_EXPORT ]( EX_CLASS, "VimArea", VimArea );