From 02f8faee55326a09acd34f214b111cdfb6873e97 Mon Sep 17 00:00:00 2001 From: nightwing Date: Sun, 15 May 2011 18:51:27 +0500 Subject: [PATCH] fix $setUndoSelection for multiline deltas --- lib/ace/edit_session.js | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/lib/ace/edit_session.js b/lib/ace/edit_session.js index f3f2315f..2c4c4737 100644 --- a/lib/ace/edit_session.js +++ b/lib/ace/edit_session.js @@ -691,7 +691,7 @@ var EditSession = function(text, mode) { if (delta.group == "doc") { this.doc.revertDeltas(delta.deltas); lastUndoRange = - this.$setUndoSelection(delta.deltas, true, lastUndoRange); + this.$getUndoSelection(delta.deltas, true, lastUndoRange); } else { delta.deltas.forEach(function(foldDelta) { this.addFolds(foldDelta.folds); @@ -699,6 +699,7 @@ var EditSession = function(text, mode) { } } this.$fromUndo = false; + lastUndoRange && this.selection.setSelectionRange(lastUndoRange); }, this.redoChanges = function(deltas) { @@ -712,13 +713,14 @@ var EditSession = function(text, mode) { if (delta.group == "doc") { this.doc.applyDeltas(delta.deltas); lastUndoRange = - this.$setUndoSelection(delta.deltas, false, lastUndoRange); + this.$getUndoSelection(delta.deltas, false, lastUndoRange); } } this.$fromUndo = false; + lastUndoRange && this.selection.setSelectionRange(lastUndoRange); }, - this.$setUndoSelection = function(deltas, isUndo, lastUndoRange) { + this.$getUndoSelection = function(deltas, isUndo, lastUndoRange) { function isInsert(delta) { var insert = delta.action == "insertText" || delta.action == "insertLines"; @@ -726,7 +728,7 @@ var EditSession = function(text, mode) { } var delta = deltas[0]; - var range; + var range, point; var lastDeltaIsInsert = false; if (isInsert(delta)) { range = delta.range.clone(); @@ -739,15 +741,18 @@ var EditSession = function(text, mode) { for (var i = 1; i < deltas.length; i++) { delta = deltas[i]; if (isInsert(delta)) { - if (range.compare(delta.range.start) == -1) { + point = delta.range.start; + if (range.compare(point.row, point.column) == -1) { range.setStart(delta.range.start); } - if (range.compare(delta.range.end) == 1) { + point = delta.range.end; + if (range.compare(point.row, point.column) == 1) { range.setEnd(delta.range.end); } lastDeltaIsInsert = true; } else { - if (range.compare(delta.range.start) == -1) { + point = delta.range.start; + if (range.compare(point.row, point.column) == -1) { range = Range.fromPoints(delta.range.start, delta.range.start); } @@ -766,11 +771,6 @@ var EditSession = function(text, mode) { } } - if (!range.isEmpty()) { - this.selection.setSelectionRange(range); - } else { - this.selection.moveCursorToPosition(range.start); - } return range; },