mirror of
https://github.com/atom/atom.git
synced 2026-02-14 16:45:14 -05:00
Add EditSession.transact and friends
`EditSession.transact` adds more semantics on top of `UndoManager`'s version pertaining to restoring selections on undo/redo of the transaction.
This commit is contained in:
@@ -224,14 +224,11 @@ class Buffer
|
||||
else
|
||||
operation.do()
|
||||
|
||||
transact: (fn) ->
|
||||
@undoManager.transact(fn)
|
||||
|
||||
undo: (editSession) ->
|
||||
@undoManager.undo(editSession)
|
||||
|
||||
redo: (editSession) ->
|
||||
@undoManager.redo(editSession)
|
||||
transact: (fn) -> @undoManager.transact(fn)
|
||||
undo: (editSession) -> @undoManager.undo(editSession)
|
||||
redo: (editSession) -> @undoManager.redo(editSession)
|
||||
commit: -> @undoManager.commit()
|
||||
abort: -> @undoManager.abort()
|
||||
|
||||
save: ->
|
||||
@saveAs(@getPath()) if @isModified()
|
||||
|
||||
@@ -235,6 +235,27 @@ class EditSession
|
||||
redo: ->
|
||||
@buffer.redo(this)
|
||||
|
||||
transact: (fn) ->
|
||||
isNewTransaction = @buffer.transact()
|
||||
console.log isNewTransaction
|
||||
oldSelectedRanges = @getSelectedBufferRanges()
|
||||
@pushOperation
|
||||
undo: (editSession) ->
|
||||
editSession?.setSelectedBufferRanges(oldSelectedRanges)
|
||||
if fn
|
||||
fn()
|
||||
@commit() if isNewTransaction
|
||||
|
||||
commit: ->
|
||||
newSelectedRanges = @getSelectedBufferRanges()
|
||||
@pushOperation
|
||||
redo: (editSession) ->
|
||||
editSession?.setSelectedBufferRanges(newSelectedRanges)
|
||||
@buffer.commit()
|
||||
|
||||
abort: ->
|
||||
@buffer.abort()
|
||||
|
||||
foldAll: ->
|
||||
@displayBuffer.foldAll()
|
||||
|
||||
@@ -303,19 +324,6 @@ class EditSession
|
||||
mutateSelectedText: (fn) ->
|
||||
@transact => fn(selection) for selection in @getSelections()
|
||||
|
||||
transact: (fn) ->
|
||||
@buffer.transact =>
|
||||
oldSelectedRanges = @getSelectedBufferRanges()
|
||||
@pushOperation
|
||||
undo: (editSession) ->
|
||||
editSession?.setSelectedBufferRanges(oldSelectedRanges)
|
||||
|
||||
fn()
|
||||
newSelectedRanges = @getSelectedBufferRanges()
|
||||
@pushOperation
|
||||
redo: (editSession) ->
|
||||
editSession?.setSelectedBufferRanges(newSelectedRanges)
|
||||
|
||||
pushOperation: (operation) ->
|
||||
@buffer.pushOperation(operation, this)
|
||||
|
||||
|
||||
@@ -29,13 +29,14 @@ class UndoManager
|
||||
@clear()
|
||||
|
||||
transact: (fn) ->
|
||||
shouldCommit = not @currentTransaction?
|
||||
isNewTransaction = not @currentTransaction?
|
||||
@currentTransaction ?= []
|
||||
if fn
|
||||
try
|
||||
fn()
|
||||
finally
|
||||
@commit() if shouldCommit
|
||||
@commit() if isNewTransaction
|
||||
isNewTransaction
|
||||
|
||||
commit: ->
|
||||
@undoHistory.push(@currentTransaction) if @currentTransaction?.length
|
||||
|
||||
Reference in New Issue
Block a user