DELETE command in VISUAL, generalized Stator Obj
This commit is contained in:
71
botanjs/src/Components/Vim/State/Stator.js
Normal file
71
botanjs/src/Components/Vim/State/Stator.js
Normal 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 );
|
||||
})();
|
Reference in New Issue
Block a user