DELETE command in VISUAL, generalized Stator Obj

This commit is contained in:
2016-03-23 03:15:02 +08:00
parent 5f5e0604fa
commit 78f8a20a5d
10 changed files with 241 additions and 134 deletions

View File

@@ -0,0 +1,71 @@
(function(){
var ns = __namespace( "Components.Vim.State" );
var Stator = function( cur, start )
{
this.__cursor = cur;
this.__startPosition = start == undefined ? cur.aPos : start;
this.__startState = this.__saveCur();
};
Stator.prototype.save = function( insertLength, contentUndo )
{
var cur = this.__cursor;
var feeder = cur.feeder;
var startPos = this.__startPosition;
if( insertLength < 0 )
{
startPos += insertLength;
insertLength = 0;
}
var sSt = this.__startState;
var eSt = this.__saveCur();
var st = sSt;
// Calling this repeatedly will swap between UNDO / REDO state
return function() {
var contentRedo = feeder.content.substr( startPos, insertLength );
feeder.content =
feeder.content.substring( 0, startPos )
+ contentUndo
+ feeder.content.substring( startPos + insertLength );
insertLength = contentUndo.length;
contentUndo = contentRedo;
cur.PStart = st.p;
cur.PEnd = st.p + 1;
cur.X = st.x;
cur.Y = st.y;
feeder.panX = st.px;
feeder.panY = st.py;
feeder.pan();
st = ( st == sSt ) ? eSt : sSt;
};
};
Stator.prototype.__saveCur = function()
{
var c = this.__cursor;
var obj = {
p: c.PStart
, x: c.X
, y: c.Y
, px: c.feeder.panX
, py: c.feeder.panY
};
if( 0 < obj.x )
{
obj.p -= 1;
obj.x -= 1;
}
return obj;
};
ns[ NS_EXPORT ]( EX_CLASS, "Stator", Stator );
})();