forked from Botanical/BotanJS
		
	Merge remote-tracking branch 'vim/master' into Astro
This commit is contained in:
		@@ -1,19 +1,21 @@
 | 
			
		||||
(function(){
 | 
			
		||||
	var ns = __namespace( "Components.Vim.Actions" );
 | 
			
		||||
 | 
			
		||||
	/** @type {Dandelion} */
 | 
			
		||||
	var Dand                                    = __import( "Dandelion" );
 | 
			
		||||
	/** @type {Dandelion.IDOMElement} */
 | 
			
		||||
	var IDOMElement                             = __import( "Dandelion.IDOMElement" );
 | 
			
		||||
	/** @type {Dandelion.IDOMObject} */
 | 
			
		||||
	var IDOMObject                              = __import( "Dandelion.IDOMObject" );
 | 
			
		||||
	/** @type {System.Cycle} */
 | 
			
		||||
	var Cycle                                   = __import( "System.Cycle" );
 | 
			
		||||
	/** @type {System.Debug} */
 | 
			
		||||
	var debug                                   = __import( "System.Debug" );
 | 
			
		||||
 | 
			
		||||
	var debug = __import( "System.Debug" );
 | 
			
		||||
	var Mesg = __import( "Components.Vim.Message" );
 | 
			
		||||
 | 
			
		||||
	var Translate = function( c )
 | 
			
		||||
	{
 | 
			
		||||
		switch( c )
 | 
			
		||||
		{
 | 
			
		||||
			case "Tab":
 | 
			
		||||
				return "\t";
 | 
			
		||||
			default:
 | 
			
		||||
				return c;
 | 
			
		||||
		}
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	/** @type {Components.Vim.Cursor.IAction} */
 | 
			
		||||
	var INSERT = function( Cursor )
 | 
			
		||||
	{
 | 
			
		||||
@@ -25,6 +27,46 @@
 | 
			
		||||
	{
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	INSERT.prototype.handler = function( e )
 | 
			
		||||
	{
 | 
			
		||||
		e.preventDefault();
 | 
			
		||||
		var inputChar = Translate( e.key );
 | 
			
		||||
 | 
			
		||||
		if( inputChar.length != 1 ) return;
 | 
			
		||||
 | 
			
		||||
		var cur = this.cursor;
 | 
			
		||||
		var feeder = cur.feeder;
 | 
			
		||||
 | 
			
		||||
		var line = cur.getLine();
 | 
			
		||||
		var n = line.lineNum;
 | 
			
		||||
 | 
			
		||||
		var cont = feeder.content;
 | 
			
		||||
 | 
			
		||||
		var f = 0;
 | 
			
		||||
		if( 0 < n )
 | 
			
		||||
		{
 | 
			
		||||
			f = cont.indexOf( "\n" );
 | 
			
		||||
			for( i = 1; f != -1 && i < n; i ++ )
 | 
			
		||||
			{
 | 
			
		||||
				f = cont.indexOf( "\n", f + 1 );
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if( this.cursor.feeder.wrap )
 | 
			
		||||
			{
 | 
			
		||||
				// wordwrap offset
 | 
			
		||||
				f ++;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		f += cur.aX;
 | 
			
		||||
 | 
			
		||||
		feeder.content = cont.substring( 0, f ) + inputChar +  cont.substring( f );
 | 
			
		||||
		feeder.pan();
 | 
			
		||||
		feeder.dispatcher.dispatchEvent( new BotanEvent( "VisualUpdate" ) );
 | 
			
		||||
 | 
			
		||||
		cur.moveX( 1 );
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	INSERT.prototype.getMessage = function()
 | 
			
		||||
	{
 | 
			
		||||
		var l = this.cursor.feeder.firstBuffer.cols;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										101
									
								
								botanjs/src/Components/Vim/Controls.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								botanjs/src/Components/Vim/Controls.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,101 @@
 | 
			
		||||
(function(){
 | 
			
		||||
	var ns = __namespace( "Components.Vim" );
 | 
			
		||||
 | 
			
		||||
	var debug = __import( "System.Debug" );
 | 
			
		||||
 | 
			
		||||
	var Controls = function( sender, e )
 | 
			
		||||
	{
 | 
			
		||||
		// Neve capture these keys
 | 
			
		||||
		if( e.altKey
 | 
			
		||||
			// F2 - F12
 | 
			
		||||
			|| ( 112 < e.keyCode && e.keyCode < 124 )
 | 
			
		||||
		) return;
 | 
			
		||||
 | 
			
		||||
		// Action Mode handled by the actions themselves
 | 
			
		||||
		var cfeeder = sender.contentFeeder;
 | 
			
		||||
		if( cfeeder.cursor.action )
 | 
			
		||||
		{
 | 
			
		||||
			// Esc OR Ctrl+c
 | 
			
		||||
			if( e.keyCode == 27 || ( e.ctrlKey && e.keyCode == 67 ) )
 | 
			
		||||
			{
 | 
			
		||||
				e.preventDefault();
 | 
			
		||||
				cfeeder.cursor.closeAction();
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			{
 | 
			
		||||
				cfeeder.cursor.action.handler( e );
 | 
			
		||||
			}
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		e.preventDefault();
 | 
			
		||||
 | 
			
		||||
		if( e.ctrlKey )
 | 
			
		||||
		{
 | 
			
		||||
			VimComboFunc( sender, e );
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		var kCode = e.keyCode + ( e.shiftKey ? 1000 : 0 );
 | 
			
		||||
 | 
			
		||||
		var cfeeder = sender.contentFeeder;
 | 
			
		||||
		var sfeeder = sender.statusFeeder;
 | 
			
		||||
		switch( kCode )
 | 
			
		||||
		{
 | 
			
		||||
			// Cursor movements
 | 
			
		||||
			case 8: // Backspace, go back 1 char, regardless of line
 | 
			
		||||
				break;
 | 
			
		||||
			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;
 | 
			
		||||
 | 
			
		||||
			// Insert
 | 
			
		||||
			case 65: // a
 | 
			
		||||
				cfeeder.cursor.openAction( "INSERT" );
 | 
			
		||||
				break;
 | 
			
		||||
 | 
			
		||||
			case 1065: // A, append at the line end
 | 
			
		||||
				break;
 | 
			
		||||
			case 73: // i
 | 
			
		||||
				break;
 | 
			
		||||
			case 1073: // I, append before the line start, after spaces
 | 
			
		||||
				break;
 | 
			
		||||
 | 
			
		||||
			// remove characters
 | 
			
		||||
			case 88: // x, remove in cursor
 | 
			
		||||
				break;
 | 
			
		||||
			case 1088: // X, remove before cursor
 | 
			
		||||
				break;
 | 
			
		||||
 | 
			
		||||
			case 1072: // H, First line buffer
 | 
			
		||||
				break;
 | 
			
		||||
			case 1076: // L, Last line buffer
 | 
			
		||||
				break;
 | 
			
		||||
			case 1052: // $
 | 
			
		||||
				cfeeder.cursor.lineEnd();
 | 
			
		||||
				break;
 | 
			
		||||
			case 1053: // %
 | 
			
		||||
				break;
 | 
			
		||||
			case 1054: // ^
 | 
			
		||||
				cfeeder.cursor.lineStart();
 | 
			
		||||
				break;
 | 
			
		||||
			case 1074: // J, Join lines
 | 
			
		||||
				break;
 | 
			
		||||
			case 1075: // K, manual entry
 | 
			
		||||
				break;
 | 
			
		||||
			case 112: // F1, help
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	ns[ NS_EXPORT ]( EX_FUNC, "Controls", Controls );
 | 
			
		||||
})();
 | 
			
		||||
@@ -1,16 +1,8 @@
 | 
			
		||||
(function(){
 | 
			
		||||
	var ns = __namespace( "Components.Vim" );
 | 
			
		||||
 | 
			
		||||
	/** @type {Dandelion} */
 | 
			
		||||
	var Dand                                    = __import( "Dandelion" );
 | 
			
		||||
	/** @type {Dandelion.IDOMElement} */
 | 
			
		||||
	var IDOMElement                             = __import( "Dandelion.IDOMElement" );
 | 
			
		||||
	/** @type {Dandelion.IDOMObject} */
 | 
			
		||||
	var IDOMObject                              = __import( "Dandelion.IDOMObject" );
 | 
			
		||||
	/** @type {System.Cycle} */
 | 
			
		||||
	var Cycle                                   = __import( "System.Cycle" );
 | 
			
		||||
	/** @type {System.Debug} */
 | 
			
		||||
	var debug                                   = __import( "System.Debug" );
 | 
			
		||||
	var debug = __import( "System.Debug" );
 | 
			
		||||
 | 
			
		||||
	var Actions = __import( "Components.Vim.Actions.*" );
 | 
			
		||||
 | 
			
		||||
@@ -79,7 +71,6 @@
 | 
			
		||||
		// The resulting position
 | 
			
		||||
		this.P = 0;
 | 
			
		||||
 | 
			
		||||
		/** @type {Components.Vim.IAction} */
 | 
			
		||||
		this.action = null;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
@@ -215,13 +206,21 @@
 | 
			
		||||
		this.updatePosition();
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	Cursor.prototype.openInsert = function()
 | 
			
		||||
	Cursor.prototype.openAction = function( name )
 | 
			
		||||
	{
 | 
			
		||||
		var feeder = this.feeder;
 | 
			
		||||
		if( this.action ) this.action.dispose();
 | 
			
		||||
		this.action = new Actions[ "INSERT" ];
 | 
			
		||||
		this.action = new (Actions[ name ])( this );
 | 
			
		||||
 | 
			
		||||
		feeder.dispatcher.dispatchEvent( new BotanEvent( "VisualUpdate" ) );
 | 
			
		||||
		this.feeder.dispatcher.dispatchEvent( new BotanEvent( "VisualUpdate" ) );
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	Cursor.prototype.closeAction = function()
 | 
			
		||||
	{
 | 
			
		||||
		if( !this.action ) return;
 | 
			
		||||
		this.action.dispose();
 | 
			
		||||
		this.action = null;
 | 
			
		||||
 | 
			
		||||
		this.feeder.dispatcher.dispatchEvent( new BotanEvent( "VisualUpdate" ) );
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	Cursor.prototype.getLine = function()
 | 
			
		||||
@@ -239,12 +238,32 @@
 | 
			
		||||
		return line;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	// The absX for current Line
 | 
			
		||||
	__readOnly( Cursor.prototype, "aX", function()
 | 
			
		||||
	{
 | 
			
		||||
		var X = this.X;
 | 
			
		||||
		var f = this.feeder;
 | 
			
		||||
 | 
			
		||||
		// Calculate wordwrap offset
 | 
			
		||||
		if( f.wrap )
 | 
			
		||||
		{
 | 
			
		||||
			var cols = f.firstBuffer.cols + 1;
 | 
			
		||||
			var w = X < cols ? 0 : Math.floor( X / cols );
 | 
			
		||||
 | 
			
		||||
			if( 0 < w )
 | 
			
		||||
			{
 | 
			
		||||
				X -= w;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return X;
 | 
			
		||||
	} );
 | 
			
		||||
 | 
			
		||||
	__readOnly( Cursor.prototype, "message", function()
 | 
			
		||||
	{
 | 
			
		||||
		return this.action && this.action.getMessage();
 | 
			
		||||
	} );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	__readOnly( Cursor.prototype, "position", function()
 | 
			
		||||
	{
 | 
			
		||||
		return {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,16 +1,7 @@
 | 
			
		||||
(function(){
 | 
			
		||||
	var ns = __namespace( "Components.Vim" );
 | 
			
		||||
 | 
			
		||||
	/** @type {Dandelion} */
 | 
			
		||||
	var Dand                                    = __import( "Dandelion" );
 | 
			
		||||
	/** @type {Dandelion.IDOMElement} */
 | 
			
		||||
	var IDOMElement                             = __import( "Dandelion.IDOMElement" );
 | 
			
		||||
	/** @type {Dandelion.IDOMObject} */
 | 
			
		||||
	var IDOMObject                              = __import( "Dandelion.IDOMObject" );
 | 
			
		||||
	/** @type {System.Cycle} */
 | 
			
		||||
	var Cycle                                   = __import( "System.Cycle" );
 | 
			
		||||
	/** @type {System.Debug} */
 | 
			
		||||
	var debug                                   = __import( "System.Debug" );
 | 
			
		||||
	var debug = __import( "System.Debug" );
 | 
			
		||||
 | 
			
		||||
	var LineBuffer = function( cols, nextLineBuffer )
 | 
			
		||||
	{
 | 
			
		||||
@@ -48,9 +39,10 @@
 | 
			
		||||
 | 
			
		||||
		var i = 0;
 | 
			
		||||
		var numTabs = 0;
 | 
			
		||||
		var tabw = this.tabWidth - 1;
 | 
			
		||||
		if( wrap )
 | 
			
		||||
		{
 | 
			
		||||
			for( ; i < this.cols - numTabs * this.tabWidth; i ++ )
 | 
			
		||||
			for( ; i < this.cols - numTabs * tabw; i ++ )
 | 
			
		||||
			{
 | 
			
		||||
				var c = content[i];
 | 
			
		||||
				if( c === undefined ) break;
 | 
			
		||||
@@ -87,7 +79,7 @@
 | 
			
		||||
					numTabs ++;
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				if( i < this.cols - numTabs * this.tabWidth )
 | 
			
		||||
				if( i < this.cols - numTabs * tabw )
 | 
			
		||||
				{
 | 
			
		||||
					line += c;
 | 
			
		||||
				}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,16 +1,8 @@
 | 
			
		||||
(function(){
 | 
			
		||||
	var ns = __namespace( "Components.Vim" );
 | 
			
		||||
 | 
			
		||||
	/** @type {Dandelion} */
 | 
			
		||||
	var Dand                                    = __import( "Dandelion" );
 | 
			
		||||
	/** @type {Dandelion.IDOMElement} */
 | 
			
		||||
	var IDOMElement                             = __import( "Dandelion.IDOMElement" );
 | 
			
		||||
	/** @type {Dandelion.IDOMObject} */
 | 
			
		||||
	var IDOMObject                              = __import( "Dandelion.IDOMObject" );
 | 
			
		||||
	/** @type {System.Cycle} */
 | 
			
		||||
	var Cycle                                   = __import( "System.Cycle" );
 | 
			
		||||
	/** @type {System.Debug} */
 | 
			
		||||
	var debug                                   = __import( "System.Debug" );
 | 
			
		||||
	var debug = __import( "System.Debug" );
 | 
			
		||||
 | 
			
		||||
	/** @type {Components.Vim.LineBuffer} */
 | 
			
		||||
	var LineBuffer = ns[ NS_INVOKE ]( "LineBuffer" );
 | 
			
		||||
@@ -34,6 +26,8 @@
 | 
			
		||||
		this.panX = 0;
 | 
			
		||||
		this.panY = 0;
 | 
			
		||||
 | 
			
		||||
		this.wrap = true;
 | 
			
		||||
 | 
			
		||||
		this.setRender();
 | 
			
		||||
 | 
			
		||||
		this.cursor = new Cursor( this );
 | 
			
		||||
@@ -42,8 +36,6 @@
 | 
			
		||||
		this.__clseLine = null;
 | 
			
		||||
		this.__moreAt = -1;
 | 
			
		||||
		this.__rows = rows;
 | 
			
		||||
 | 
			
		||||
		this.__wrap = true;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	Feeder.prototype.init = function( content, wrap )
 | 
			
		||||
@@ -51,13 +43,15 @@
 | 
			
		||||
		this.content = content;
 | 
			
		||||
		this.setWrap( wrap );
 | 
			
		||||
 | 
			
		||||
		this.firstBuffer.Push( content, this.__wrap, 0 ); 
 | 
			
		||||
		this.firstBuffer.Push( content, this.wrap, 0 ); 
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	Feeder.prototype.setWrap = function( wrap )
 | 
			
		||||
	{
 | 
			
		||||
		if( wrap == undefined ) return;
 | 
			
		||||
		this.__wrap = wrap;
 | 
			
		||||
		this.wrap = wrap;
 | 
			
		||||
 | 
			
		||||
		// TODO: Update
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	Feeder.prototype.setRender = function( placeholder )
 | 
			
		||||
@@ -136,8 +130,6 @@
 | 
			
		||||
		if( dX == undefined ) dX = 0;
 | 
			
		||||
		if( dY == undefined ) dY = 0;
 | 
			
		||||
 | 
			
		||||
		if( dX == 0 && dY == 0 ) return;
 | 
			
		||||
 | 
			
		||||
		var X = this.panX + dX;
 | 
			
		||||
		var Y = this.panY + dY;
 | 
			
		||||
 | 
			
		||||
@@ -150,7 +142,7 @@
 | 
			
		||||
		if( 0 < Y )
 | 
			
		||||
		{
 | 
			
		||||
			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 );
 | 
			
		||||
			}
 | 
			
		||||
@@ -158,7 +150,7 @@
 | 
			
		||||
 | 
			
		||||
		this.firstBuffer.Push(
 | 
			
		||||
			this.content.substr( f + 1 )
 | 
			
		||||
			, this.__wrap, i );
 | 
			
		||||
			, this.wrap, i );
 | 
			
		||||
 | 
			
		||||
		this.panX = X;
 | 
			
		||||
		this.panY = Y;
 | 
			
		||||
@@ -203,8 +195,7 @@
 | 
			
		||||
	} );
 | 
			
		||||
 | 
			
		||||
	__readOnly( Feeder.prototype, "lineStat", function() {
 | 
			
		||||
		var X = this.cursor.X;
 | 
			
		||||
 | 
			
		||||
		var X = this.cursor.aX;
 | 
			
		||||
		var line = this.cursor.getLine();
 | 
			
		||||
		var tabStat = "";
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,16 +1,7 @@
 | 
			
		||||
(function(){
 | 
			
		||||
	var ns = __namespace( "Components.Vim" );
 | 
			
		||||
 | 
			
		||||
	/** @type {Dandelion} */
 | 
			
		||||
	var Dand                                    = __import( "Dandelion" );
 | 
			
		||||
	/** @type {Dandelion.IDOMElement} */
 | 
			
		||||
	var IDOMElement                             = __import( "Dandelion.IDOMElement" );
 | 
			
		||||
	/** @type {Dandelion.IDOMObject} */
 | 
			
		||||
	var IDOMObject                              = __import( "Dandelion.IDOMObject" );
 | 
			
		||||
	/** @type {System.Cycle} */
 | 
			
		||||
	var Cycle                                   = __import( "System.Cycle" );
 | 
			
		||||
	/** @type {System.Debug} */
 | 
			
		||||
	var debug                                   = __import( "System.Debug" );
 | 
			
		||||
	var debug = __import( "System.Debug" );
 | 
			
		||||
 | 
			
		||||
	/** @type {Components.VimArea.LineFeeder} */
 | 
			
		||||
	var LineFeeder = ns[ NS_INVOKE ]( "LineFeeder" );
 | 
			
		||||
 
 | 
			
		||||
@@ -1,12 +1,8 @@
 | 
			
		||||
(function(){
 | 
			
		||||
	var ns = __namespace( "Components.Vim" );
 | 
			
		||||
 | 
			
		||||
	/** @type {Dandelion} */
 | 
			
		||||
	var Dand                                    = __import( "Dandelion" );
 | 
			
		||||
	/** @type {Dandelion.IDOMElement} */
 | 
			
		||||
	var IDOMElement                             = __import( "Dandelion.IDOMElement" );
 | 
			
		||||
	/** @type {Dandelion.IDOMObject} */
 | 
			
		||||
	var IDOMObject                              = __import( "Dandelion.IDOMObject" );
 | 
			
		||||
	/** @type {System.utils.DataKey} */
 | 
			
		||||
	var DataKey                                 = __import( "System.utils.DataKey" );
 | 
			
		||||
	/** @type {System.Cycle} */
 | 
			
		||||
@@ -19,6 +15,7 @@
 | 
			
		||||
	/** @type {Components.Vim.StatusBar} */
 | 
			
		||||
	var StatusBar = ns[ NS_INVOKE ]( "StatusBar" );
 | 
			
		||||
 | 
			
		||||
	var VimControls = ns[ NS_INVOKE ]( "Controls" );
 | 
			
		||||
	var mesg = ns[ NS_INVOKE ]( "Message" );
 | 
			
		||||
 | 
			
		||||
	var KeyHandler = function( sender, handler )
 | 
			
		||||
@@ -33,81 +30,6 @@
 | 
			
		||||
		};
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	var VimControls = function( sender, e )
 | 
			
		||||
	{
 | 
			
		||||
		if( e.altKey
 | 
			
		||||
			// F2 - F12
 | 
			
		||||
			|| ( 112 < e.keyCode && e.keyCode < 124 )
 | 
			
		||||
		) return;
 | 
			
		||||
 | 
			
		||||
		e.preventDefault();
 | 
			
		||||
		if( e.ctrlKey )
 | 
			
		||||
		{
 | 
			
		||||
			VimComboFunc( sender, e );
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		var kCode = e.keyCode + ( e.shiftKey ? 1000 : 0 );
 | 
			
		||||
 | 
			
		||||
		var cfeeder = sender.contentFeeder;
 | 
			
		||||
		var sfeeder = sender.statusFeeder;
 | 
			
		||||
		switch( kCode )
 | 
			
		||||
		{
 | 
			
		||||
			// Cursor movements
 | 
			
		||||
			case 8: // Backspace, go back 1 char, regardless of line
 | 
			
		||||
				break;
 | 
			
		||||
			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;
 | 
			
		||||
 | 
			
		||||
			// Insert
 | 
			
		||||
			case 65: // a
 | 
			
		||||
				cfeeder.cursor.openInsert();
 | 
			
		||||
				break;
 | 
			
		||||
 | 
			
		||||
			case 1065: // A, append at the line end
 | 
			
		||||
				break;
 | 
			
		||||
			case 73: // i
 | 
			
		||||
				break;
 | 
			
		||||
			case 1073: // I, append before the line start, after spaces
 | 
			
		||||
				break;
 | 
			
		||||
 | 
			
		||||
			// remove characters
 | 
			
		||||
			case 88: // x, remove in cursor
 | 
			
		||||
				break;
 | 
			
		||||
			case 1088: // X, remove before cursor
 | 
			
		||||
				break;
 | 
			
		||||
 | 
			
		||||
			case 1072: // H, First line buffer
 | 
			
		||||
				break;
 | 
			
		||||
			case 1076: // L, Last line buffer
 | 
			
		||||
				break;
 | 
			
		||||
			case 1052: // $
 | 
			
		||||
				cfeeder.cursor.lineEnd();
 | 
			
		||||
				break;
 | 
			
		||||
			case 1053: // %
 | 
			
		||||
				break;
 | 
			
		||||
			case 1054: // ^
 | 
			
		||||
				cfeeder.cursor.lineStart();
 | 
			
		||||
				break;
 | 
			
		||||
			case 1074: // J, Join lines
 | 
			
		||||
				break;
 | 
			
		||||
			case 1075: // K, manual entry
 | 
			
		||||
				break;
 | 
			
		||||
			case 112: // F1, help
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	/* stage @param {Dandelion.IDOMElement} */
 | 
			
		||||
	var VimArea = function( stage )
 | 
			
		||||
	{
 | 
			
		||||
@@ -127,9 +49,6 @@
 | 
			
		||||
		this.rows = element.rows;
 | 
			
		||||
		this.cols = element.cols;
 | 
			
		||||
 | 
			
		||||
		this.PosX = 1;
 | 
			
		||||
		this.PosY = 1;
 | 
			
		||||
 | 
			
		||||
		this.__active = false;
 | 
			
		||||
 | 
			
		||||
		var _self = this;
 | 
			
		||||
@@ -142,10 +61,6 @@
 | 
			
		||||
		this.VisualizeVimFrame( element.value );
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	VimArea.prototype.startInput = function( mode )
 | 
			
		||||
	{
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	VimArea.prototype.select = function( sel )
 | 
			
		||||
	{
 | 
			
		||||
		if( !this.__active ) return;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,17 +1,6 @@
 | 
			
		||||
(function(){
 | 
			
		||||
	var ns = __namespace( "Components.Vim" );
 | 
			
		||||
 | 
			
		||||
	/** @type {Dandelion} */
 | 
			
		||||
	var Dand                                    = __import( "Dandelion" );
 | 
			
		||||
	/** @type {Dandelion.IDOMElement} */
 | 
			
		||||
	var IDOMElement                             = __import( "Dandelion.IDOMElement" );
 | 
			
		||||
	/** @type {Dandelion.IDOMObject} */
 | 
			
		||||
	var IDOMObject                              = __import( "Dandelion.IDOMObject" );
 | 
			
		||||
	/** @type {System.Cycle} */
 | 
			
		||||
	var Cycle                                   = __import( "System.Cycle" );
 | 
			
		||||
	/** @type {System.Debug} */
 | 
			
		||||
	var debug                                   = __import( "System.Debug" );
 | 
			
		||||
 | 
			
		||||
	var messages = {
 | 
			
		||||
		"INSERT": "-- INSERT --"
 | 
			
		||||
		, "REPLACE": "-- REPLACE --"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										45
									
								
								botanjs/src/externs/Components.Vim.Cursor.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								botanjs/src/externs/Components.Vim.Cursor.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
			
		||||
/** @constructor */
 | 
			
		||||
Components.Vim.Cursor = function(){};
 | 
			
		||||
 | 
			
		||||
/** @type {Components.Vim.LineFeeder} */
 | 
			
		||||
Components.Vim.Cursor.feeder;
 | 
			
		||||
/** @type {Components.Vim.IAction} */
 | 
			
		||||
Components.Vim.Cursor.action;
 | 
			
		||||
 | 
			
		||||
/** @type Function */
 | 
			
		||||
Components.Vim.Cursor.moveX;
 | 
			
		||||
/** @type Function */
 | 
			
		||||
Components.Vim.Cursor.moveY;
 | 
			
		||||
/** @type Function */
 | 
			
		||||
Components.Vim.Cursor.lineStart;
 | 
			
		||||
/** @type Function */
 | 
			
		||||
Components.Vim.Cursor.lineEnd;
 | 
			
		||||
/** @type Function */
 | 
			
		||||
Components.Vim.Cursor.updatePosition;
 | 
			
		||||
/** @type Function */
 | 
			
		||||
Components.Vim.Cursor.openAction;
 | 
			
		||||
/** @type Function */
 | 
			
		||||
Components.Vim.Cursor.closeAction;
 | 
			
		||||
 | 
			
		||||
/** @type {Array} */
 | 
			
		||||
Components.Vim.Cursor.lineBuffers;
 | 
			
		||||
/** @type Number */
 | 
			
		||||
Components.Vim.Cursor.pX;
 | 
			
		||||
/** @type Number */
 | 
			
		||||
Components.Vim.Cursor.P;
 | 
			
		||||
/** @type Number */
 | 
			
		||||
Components.Vim.Cursor.aX;
 | 
			
		||||
/** @type Number */
 | 
			
		||||
Components.Vim.Cursor.X;
 | 
			
		||||
/** @type Number */
 | 
			
		||||
Components.Vim.Cursor.Y;
 | 
			
		||||
/** @type Number */
 | 
			
		||||
Components.Vim.Cursor.cols;
 | 
			
		||||
/** @type message */
 | 
			
		||||
Components.Vim.Cursor.string;
 | 
			
		||||
/** @type Object */
 | 
			
		||||
Components.Vim.Cursor.position;
 | 
			
		||||
/** @type Number */
 | 
			
		||||
Components.Vim.Cursor.position.start;
 | 
			
		||||
/** @type Number */
 | 
			
		||||
Components.Vim.Cursor.position.end;
 | 
			
		||||
							
								
								
									
										9
									
								
								botanjs/src/externs/Components.Vim.IAction.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								botanjs/src/externs/Components.Vim.IAction.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
			
		||||
/** @constructor */
 | 
			
		||||
Components.Vim.IAction = function(){};
 | 
			
		||||
 | 
			
		||||
/** @type Function */
 | 
			
		||||
Components.Vim.IAction.dispose;
 | 
			
		||||
/** @type Function */
 | 
			
		||||
Components.Vim.IAction.handler;
 | 
			
		||||
/** @type Function */
 | 
			
		||||
Components.Vim.IAction.getMessage;
 | 
			
		||||
							
								
								
									
										42
									
								
								botanjs/src/externs/Components.Vim.LineBuffer.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								botanjs/src/externs/Components.Vim.LineBuffer.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,42 @@
 | 
			
		||||
/** @constructor */
 | 
			
		||||
Components.Vim.LineBuffer = function(){};
 | 
			
		||||
 | 
			
		||||
/** @type {Components.Vim.LineBuffer} */
 | 
			
		||||
Components.Vim.LineBuffer.next;
 | 
			
		||||
/** @type {Components.Vim.LineBuffer} */
 | 
			
		||||
Components.Vim.LineBuffer.prev;
 | 
			
		||||
/** @type {Components.Vim.LineBuffer} */
 | 
			
		||||
Components.Vim.LineBuffer.nextLine;
 | 
			
		||||
 | 
			
		||||
/** @type EventDispatcher */
 | 
			
		||||
Components.Vim.LineBuffer.dispatcher;
 | 
			
		||||
 | 
			
		||||
/** @type Function */
 | 
			
		||||
Components.Vim.LineBuffer.softReset;
 | 
			
		||||
/** @type Function */
 | 
			
		||||
Components.Vim.LineBuffer.pan;
 | 
			
		||||
/** @type Function */
 | 
			
		||||
Components.Vim.LineBuffer.render;
 | 
			
		||||
/** @type Function */
 | 
			
		||||
Components.Vim.LineBuffer.setRender;
 | 
			
		||||
/** @type Function */
 | 
			
		||||
Components.Vim.LineBuffer.init;
 | 
			
		||||
/** @type Function */
 | 
			
		||||
Components.Vim.LineBuffer.setWrap;
 | 
			
		||||
 | 
			
		||||
/** @type Array */
 | 
			
		||||
Components.Vim.LineBuffer.visualLines;
 | 
			
		||||
/** @type Boolean */
 | 
			
		||||
Components.Vim.LineBuffer.placeholder;
 | 
			
		||||
/** @type Boolean */
 | 
			
		||||
Components.Vim.LineBuffer.br;
 | 
			
		||||
/** @type Number */
 | 
			
		||||
Components.Vim.LineBuffer.cols;
 | 
			
		||||
/** @type Number */
 | 
			
		||||
Components.Vim.LineBuffer.lineNum;
 | 
			
		||||
/** @type Number */
 | 
			
		||||
Components.Vim.LineBuffer.tabWidth;
 | 
			
		||||
/** @type Number */
 | 
			
		||||
Components.Vim.LineBuffer.linesOccupied;
 | 
			
		||||
/** @type String */
 | 
			
		||||
Components.Vim.LineBuffer.content;
 | 
			
		||||
							
								
								
									
										46
									
								
								botanjs/src/externs/Components.Vim.LineFeeder.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								botanjs/src/externs/Components.Vim.LineFeeder.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,46 @@
 | 
			
		||||
/** @constructor */
 | 
			
		||||
Components.Vim.LineFeeder = function(){};
 | 
			
		||||
 | 
			
		||||
/** @type {Components.Vim.Cursor} */
 | 
			
		||||
Components.Vim.LineFeeder.cursor;
 | 
			
		||||
/** @type {Components.Vim.LineBuffer} */
 | 
			
		||||
Components.Vim.LineFeeder.firstBuffer;
 | 
			
		||||
/** @type {Components.Vim.LineBuffer} */
 | 
			
		||||
Components.Vim.LineFeeder.lastBuffer;
 | 
			
		||||
 | 
			
		||||
/** @type EventDispatcher */
 | 
			
		||||
Components.Vim.LineFeeder.dispatcher;
 | 
			
		||||
 | 
			
		||||
/** @type Function */
 | 
			
		||||
Components.Vim.LineFeeder.softReset;
 | 
			
		||||
/** @type Function */
 | 
			
		||||
Components.Vim.LineFeeder.pan;
 | 
			
		||||
/** @type Function */
 | 
			
		||||
Components.Vim.LineFeeder.render;
 | 
			
		||||
/** @type Function */
 | 
			
		||||
Components.Vim.LineFeeder.setRender;
 | 
			
		||||
/** @type Function */
 | 
			
		||||
Components.Vim.LineFeeder.init;
 | 
			
		||||
/** @type Function */
 | 
			
		||||
Components.Vim.LineFeeder.setWrap;
 | 
			
		||||
 | 
			
		||||
/** @type {Array} */
 | 
			
		||||
Components.Vim.LineFeeder.lineBuffers;
 | 
			
		||||
/** @type Boolean */
 | 
			
		||||
Components.Vim.LineFeeder.EOF;
 | 
			
		||||
/** @type Boolean */
 | 
			
		||||
Components.Vim.LineFeeder.wrap;
 | 
			
		||||
/** @type Number */
 | 
			
		||||
Components.Vim.LineFeeder.panX;
 | 
			
		||||
/** @type Number */
 | 
			
		||||
Components.Vim.LineFeeder.panY;
 | 
			
		||||
/** @type Number */
 | 
			
		||||
Components.Vim.LineFeeder.moreAt;
 | 
			
		||||
/** @type Number */
 | 
			
		||||
Components.Vim.LineFeeder.linesOccupied;
 | 
			
		||||
/** @type String */
 | 
			
		||||
Components.Vim.LineFeeder.docPos;
 | 
			
		||||
/** @type String */
 | 
			
		||||
Components.Vim.LineFeeder.lineStat;
 | 
			
		||||
/** @type {String} */
 | 
			
		||||
Components.Vim.LineFeeder.content;
 | 
			
		||||
							
								
								
									
										7
									
								
								botanjs/src/externs/Components.Vim.StatusBar.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								botanjs/src/externs/Components.Vim.StatusBar.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
/** @constructor */
 | 
			
		||||
Components.Vim.StatusBar = function(){};
 | 
			
		||||
 | 
			
		||||
/** @type Function */
 | 
			
		||||
Components.Vim.StatusBar.stamp;
 | 
			
		||||
/** @type String */
 | 
			
		||||
Components.Vim.StatusBar.statusText;
 | 
			
		||||
							
								
								
									
										14
									
								
								botanjs/src/externs/Components.Vim.VimArea.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								botanjs/src/externs/Components.Vim.VimArea.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
/** @constructor */
 | 
			
		||||
Components.Vim.VimArea = function(){};
 | 
			
		||||
 | 
			
		||||
/** @type {Components.Vim.LineFeeder} */
 | 
			
		||||
Components.Vim.VimArea.contentFeeder;
 | 
			
		||||
/** @type {Components.Vim.LineFeeder} */
 | 
			
		||||
Components.Vim.VimArea.statusFeeder;
 | 
			
		||||
/** @type {Components.Vim.StatusBar} */
 | 
			
		||||
Components.Vim.VimArea.statusBar;
 | 
			
		||||
 | 
			
		||||
/** @type {Number} */
 | 
			
		||||
Components.Vim.VimArea.rows;
 | 
			
		||||
/** @type {Number} */
 | 
			
		||||
Components.Vim.VimArea.cols;
 | 
			
		||||
							
								
								
									
										2
									
								
								botanjs/src/externs/Components.Vim.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								botanjs/src/externs/Components.Vim.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
/** @object */
 | 
			
		||||
Components.Vim = {};
 | 
			
		||||
		Reference in New Issue
	
	Block a user