forked from Botanical/BotanJS
UNDO / REDO for line shift
This commit is contained in:
parent
78cb3d3610
commit
7229447ee1
@ -5,6 +5,8 @@
|
|||||||
var debug = __import( "System.Debug" );
|
var debug = __import( "System.Debug" );
|
||||||
var beep = __import( "Components.Vim.Beep" );
|
var beep = __import( "Components.Vim.Beep" );
|
||||||
|
|
||||||
|
/** @type {Components.Vim.State.Stator} */
|
||||||
|
var Stator = __import( "Components.Vim.State.Stator" );
|
||||||
/** @type {Components.Vim.State.Stack} */
|
/** @type {Components.Vim.State.Stack} */
|
||||||
var Stack = __import( "Components.Vim.State.Stack" );
|
var Stack = __import( "Components.Vim.State.Stack" );
|
||||||
|
|
||||||
@ -174,10 +176,13 @@
|
|||||||
|
|
||||||
debug.Info( "Start: " + start, "End: " + end );
|
debug.Info( "Start: " + start, "End: " + end );
|
||||||
var rBlock = "";
|
var rBlock = "";
|
||||||
|
var nLen = 0;
|
||||||
|
|
||||||
var started = false;
|
var started = false;
|
||||||
var indentTimes = 1;
|
var indentTimes = 1;
|
||||||
|
|
||||||
|
var recStart = 0;
|
||||||
|
|
||||||
feeder.content = "";
|
feeder.content = "";
|
||||||
nline = 0;
|
nline = 0;
|
||||||
|
|
||||||
@ -190,19 +195,28 @@
|
|||||||
{
|
{
|
||||||
started = true;
|
started = true;
|
||||||
feeder.content = c.substring( 0, i - 1 );
|
feeder.content = c.substring( 0, i - 1 );
|
||||||
|
recStart = feeder.content.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( end < j ) break;
|
if( end < j ) break;
|
||||||
|
|
||||||
var line = c.substring( 1 < i ? i : i - 1, c.indexOf( "\n", i ) );
|
var line = c.substring( 1 < i ? i : i - 1, c.indexOf( "\n", i ) );
|
||||||
|
|
||||||
if( 1 < i ) feeder.content += "\n";
|
if( 1 < i )
|
||||||
|
{
|
||||||
|
feeder.content += "\n";
|
||||||
|
rBlock += "\n";
|
||||||
|
nLen ++;
|
||||||
|
}
|
||||||
|
|
||||||
|
rBlock += line;
|
||||||
|
|
||||||
if( line !== "" )
|
if( line !== "" )
|
||||||
{
|
{
|
||||||
|
var indentedLine;
|
||||||
if( 0 < dir )
|
if( 0 < dir )
|
||||||
{
|
{
|
||||||
feeder.content += indentChar + line;
|
indentedLine = indentChar + line;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -219,15 +233,40 @@
|
|||||||
else if( startC != "\t" ) break;
|
else if( startC != "\t" ) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
feeder.content += line.substring( si + sj - 1 );
|
indentedLine = line.substring( si + sj - 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
feeder.content += indentedLine;
|
||||||
|
|
||||||
|
nLen += indentedLine.length;
|
||||||
nline ++;
|
nline ++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var nPos = feeder.content.length;
|
||||||
feeder.content += "\n" + c.substring( i ) + "\n";
|
feeder.content += "\n" + c.substring( i ) + "\n";
|
||||||
feeder.pan();
|
feeder.pan();
|
||||||
|
|
||||||
|
cur.moveTo( nPos );
|
||||||
|
|
||||||
|
var stator = new Stator( cur, recStart );
|
||||||
|
var stack = new Stack();
|
||||||
|
|
||||||
|
recStart ++;
|
||||||
|
for( ; ~"\t ".indexOf( feeder.content[ recStart ] ); recStart ++ );
|
||||||
|
|
||||||
|
var f = stator.save( nLen, rBlock );
|
||||||
|
stack.store( function() {
|
||||||
|
f();
|
||||||
|
// Offset correction after REDO / UNDO
|
||||||
|
cur.moveTo( recStart );
|
||||||
|
cur.lineStart();
|
||||||
|
} );
|
||||||
|
|
||||||
|
cur.moveTo( recStart );
|
||||||
|
|
||||||
|
cur.rec.record( stack );
|
||||||
|
|
||||||
this.__msg = Mesg( "LINES_SHIFTED", nline, dir < 0 ? "<" : ">", 1 );
|
this.__msg = Mesg( "LINES_SHIFTED", nline, dir < 0 ? "<" : ">", 1 );
|
||||||
|
|
||||||
return Triggered;
|
return Triggered;
|
||||||
|
Loading…
Reference in New Issue
Block a user