Merge pull request #1489 from ajaxorg/undo_merge

Undo merging
This commit is contained in:
Lennart Kats 2013-07-12 00:04:40 -07:00
commit aded11265f
7 changed files with 288 additions and 66 deletions

View file

@ -406,10 +406,11 @@ var EditSession = function(text, mode) {
if (self.$deltas.length > 0) {
undoManager.execute({
action: "aceupdate",
args: [self.$deltas, self]
args: [self.$deltas, self],
merge: self.mergeUndoDeltas
});
}
self.mergeUndoDeltas = false;
self.$deltas = [];
}
this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager);
@ -1220,7 +1221,7 @@ var EditSession = function(text, mode) {
var range, point;
var lastDeltaIsInsert = false;
if (isInsert(delta)) {
range = delta.range.clone();
range = Range.fromPoints(delta.range.start, delta.range.end);
lastDeltaIsInsert = true;
} else {
range = Range.fromPoints(delta.range.start, delta.range.start);
@ -1252,6 +1253,11 @@ var EditSession = function(text, mode) {
// Check if this range and the last undo range has something in common.
// If true, merge the ranges.
if (lastUndoRange != null) {
if (Range.comparePoints(lastUndoRange.start, range.start) == 0) {
lastUndoRange.start.column += range.end.column - range.start.column;
lastUndoRange.end.column += range.end.column - range.start.column;
}
var cmp = lastUndoRange.compareRange(range);
if (cmp == 1) {
range.setStart(lastUndoRange.start);