public override void Redo (TextBuffer buffer)
	{
		TextIter insertIter = buffer.GetIterAtOffset (index);
		buffer.InsertRange (ref insertIter, chop.Start, chop.End);
		buffer.MoveMark (buffer.SelectionBound, buffer.GetIterAtOffset (index));
		buffer.MoveMark (buffer.InsertMark, buffer.GetIterAtOffset (index + chop.Length));
	}
	public override void Undo (TextBuffer buffer)
	{
		TextIter startIter, endIter;
		
		#if DEBUG
		Console.WriteLine ("DEBUG: Whole Region {0}", whole_region);
		#endif
		
		startIter = buffer.GetIterAtOffset (start);
		buffer.InsertRange (ref startIter, chop.Start, chop.End);
		
		if (whole_region) {
			endIter = buffer.GetIterAtOffset (startIter.Offset + 56);
			buffer.Delete (ref startIter, ref endIter);
		}
		
		buffer.MoveMark (buffer.InsertMark, buffer.GetIterAtOffset (is_forward ? start : end));
		buffer.MoveMark (buffer.SelectionBound, buffer.GetIterAtOffset (is_forward ? end : start));
	}