From 693c4f82708e910f815720872e532567b51ea115 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Tue, 30 Apr 2013 18:39:54 -0600 Subject: [PATCH] Preserve folds when restoring selections on undo/redo --- spec/app/edit-session-spec.coffee | 23 +++++++++++++++++++++++ src/app/edit-session.coffee | 4 ++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/spec/app/edit-session-spec.coffee b/spec/app/edit-session-spec.coffee index 16720af61..6801789a5 100644 --- a/spec/app/edit-session-spec.coffee +++ b/spec/app/edit-session-spec.coffee @@ -2038,6 +2038,29 @@ describe "EditSession", -> editSession.redo() expect(editSession.getSelectedBufferRanges()).toEqual [[[1, 6], [1, 6]], [[1, 18], [1, 18]]] + it "restores folds after undo and redo", -> + editSession.foldBufferRow(1) + editSession.setSelectedBufferRange([[1, 0], [10, Infinity]], preserveFolds: true) + expect(editSession.isFoldedAtBufferRow(1)).toBeTruthy() + + editSession.insertText """ + \ // testing + function foo() { + return 1 + 2; + } + """ + expect(editSession.isFoldedAtBufferRow(1)).toBeFalsy() + editSession.foldBufferRow(2) + + editSession.undo() + expect(editSession.isFoldedAtBufferRow(1)).toBeTruthy() + expect(editSession.isFoldedAtBufferRow(9)).toBeTruthy() + expect(editSession.isFoldedAtBufferRow(10)).toBeFalsy() + + editSession.redo() + expect(editSession.isFoldedAtBufferRow(1)).toBeFalsy() + expect(editSession.isFoldedAtBufferRow(2)).toBeTruthy() + it "restores selected ranges even when the change occurred in another edit session", -> otherEditSession = project.buildEditSession(editSession.getPath()) otherEditSession.setSelectedBufferRange([[2, 2], [3, 3]]) diff --git a/src/app/edit-session.coffee b/src/app/edit-session.coffee index 05925cf0d..6dac6f3cb 100644 --- a/src/app/edit-session.coffee +++ b/src/app/edit-session.coffee @@ -623,7 +623,7 @@ class EditSession oldSelectedRanges = @getSelectedBufferRanges() @pushOperation undo: (editSession) -> - editSession?.setSelectedBufferRanges(oldSelectedRanges) + editSession?.setSelectedBufferRanges(oldSelectedRanges, preserveFolds: true) if fn result = fn() @commit() if isNewTransaction @@ -633,7 +633,7 @@ class EditSession newSelectedRanges = @getSelectedBufferRanges() @pushOperation redo: (editSession) -> - editSession?.setSelectedBufferRanges(newSelectedRanges) + editSession?.setSelectedBufferRanges(newSelectedRanges, preserveFolds: true) @buffer.commit() abort: ->