diff --git a/lib/ace/edit_session.js b/lib/ace/edit_session.js index 6afa7107..92ffc5b4 100644 --- a/lib/ace/edit_session.js +++ b/lib/ace/edit_session.js @@ -694,7 +694,7 @@ var EditSession = function(text, mode) { return this.doc.remove(range); }; - this.undoChanges = function(deltas) { + this.undoChanges = function(deltas, dontSelect) { if (!deltas.length) return; @@ -713,10 +713,13 @@ var EditSession = function(text, mode) { } } this.$fromUndo = false; - lastUndoRange && this.selection.setSelectionRange(lastUndoRange); + lastUndoRange && + !dontSelect && + this.selection.setSelectionRange(lastUndoRange); + return lastUndoRange; }, - this.redoChanges = function(deltas) { + this.redoChanges = function(deltas, dontSelect) { if (!deltas.length) return; @@ -731,7 +734,10 @@ var EditSession = function(text, mode) { } } this.$fromUndo = false; - lastUndoRange && this.selection.setSelectionRange(lastUndoRange); + lastUndoRange && + !dontSelect && + this.selection.setSelectionRange(lastUndoRange); + return lastUndoRange; }, this.$getUndoSelection = function(deltas, isUndo, lastUndoRange) { diff --git a/lib/ace/split.js b/lib/ace/split.js index b1cd2961..e6c671ca 100644 --- a/lib/ace/split.js +++ b/lib/ace/split.js @@ -265,20 +265,16 @@ function UndoManagerProxy(undoManager, session) { } this.undo = function() { - var u = this.$u; - var deltas = u.$undoStack.pop(); - if (deltas) { - this.$doc.undoChanges(deltas); - u.$redoStack.push(deltas); + var selectionRange = this.$u.undo(true); + if (selectionRange) { + this.$doc.selection.setSelectionRange(selectionRange); } } this.redo = function() { - var u = this.$u; - var deltas = u.$redoStack.pop(); - if (deltas) { - this.$doc.redoChanges(deltas); - u.$undoStack.push(deltas); + var selectionRange = this.$u.redo(true); + if (selectionRange) { + this.$doc.selection.setSelectionRange(selectionRange); } } diff --git a/lib/ace/undomanager.js b/lib/ace/undomanager.js index 66debe14..48c1ee85 100644 --- a/lib/ace/undomanager.js +++ b/lib/ace/undomanager.js @@ -52,20 +52,26 @@ var UndoManager = function() { this.$redoStack = []; }; - this.undo = function() { + this.undo = function(dontSelect) { var deltas = this.$undoStack.pop(); + var undoSelectionRange = null; if (deltas) { - this.$doc.undoChanges(deltas); + undoSelectionRange = + this.$doc.undoChanges(deltas, dontSelect); this.$redoStack.push(deltas); } + return undoSelectionRange; }; - this.redo = function() { + this.redo = function(dontSelect) { var deltas = this.$redoStack.pop(); + var redoSelectionRange = null; if (deltas) { - this.$doc.redoChanges(deltas); + redoSelectionRange = + this.$doc.redoChanges(deltas, dontSelect); this.$undoStack.push(deltas); } + return redoSelectionRange; }; this.reset = function() {