diff --git a/src/extensions/command-panel/spec/command-interpreter-spec.coffee b/src/extensions/command-panel/spec/command-interpreter-spec.coffee index f88965815..923541e23 100644 --- a/src/extensions/command-panel/spec/command-interpreter-spec.coffee +++ b/src/extensions/command-panel/spec/command-interpreter-spec.coffee @@ -180,6 +180,16 @@ describe "CommandInterpreter", -> runs -> expect(editSession.getSelectedText()).toBe "y/b" + it "does not push to the undo stack (since the buffer is not modified)", -> + waitsForPromise -> + editSession.setSelectedBufferRange([[4,16], [4,20]]) + interpreter.eval('/pivot/', editSession) + + runs -> + selectedRangeBeforeUndo = editSession.getSelection().getBufferRange() + editSession.undo() + expect(editSession.getSelection().getBufferRange()).toEqual selectedRangeBeforeUndo + describe "when no match is found", -> it "it returns an error messages", -> errorMessages = null diff --git a/src/extensions/command-panel/src/commands/composite-command.coffee b/src/extensions/command-panel/src/commands/composite-command.coffee index f037a4a20..cc5485b4a 100644 --- a/src/extensions/command-panel/src/commands/composite-command.coffee +++ b/src/extensions/command-panel/src/commands/composite-command.coffee @@ -31,7 +31,7 @@ class CompositeCommand bufferRanges = [] errorMessages = @errorMessagesForOperations(operations) - editSession.transact -> + executeOperations = -> for operation in operations bufferRange = operation.execute(editSession) bufferRanges.push(bufferRange) if bufferRange @@ -40,6 +40,13 @@ class CompositeCommand if bufferRanges.length and not currentCommand.preserveSelections editSession.setSelectedBufferRanges(bufferRanges, autoscroll: true) + operationsWillChangeBuffer = _.detect(operations, (operation) -> operation.newText) + + if operationsWillChangeBuffer + editSession.transact(executeOperations) + else + executeOperations() + deferred.resolve({errorMessages}) deferred.promise()