Add TextEditor::withGroupingInterval

This method temporarily instructs the editor to apply undo grouping with
a given interval. This way, undo grouping can be made optional without
adding optional arguments to every buffer manipulation method.
This commit is contained in:
Max Brunsfeld
2014-11-05 11:10:51 -08:00
parent 9458db0c1f
commit b7aa421e4e
2 changed files with 46 additions and 2 deletions

View File

@@ -68,6 +68,7 @@ class TextEditor extends Model
suppressSelectionMerging: false
updateBatchDepth: 0
selectionFlashDuration: 500
groupingInterval: 0
@delegatesMethods 'suggestedIndentForBufferRow', 'autoIndentBufferRow', 'autoIndentBufferRows',
'autoDecreaseIndentForBufferRow', 'toggleLineCommentForBufferRow', 'toggleLineCommentsForBufferRows',
@@ -1097,7 +1098,7 @@ class TextEditor extends Model
# execution and revert any changes performed up to the abortion.
#
# * `fn` A {Function} to call inside the transaction.
transact: (fn) -> @buffer.transact(fn)
transact: (fn) -> @buffer.transact(fn, @groupingInterval)
# Extended: Start an open-ended transaction.
#
@@ -1105,7 +1106,7 @@ class TextEditor extends Model
# transaction. If you nest calls to transactions, only the outermost
# transaction is considered. You must match every begin with a matching
# commit, but a single call to abort will cancel all nested transactions.
beginTransaction: -> @buffer.beginTransaction()
beginTransaction: -> @buffer.beginTransaction(@groupingInterval)
# Extended: Commit an open-ended transaction started with {::beginTransaction}
# and push it to the undo stack.
@@ -1117,6 +1118,19 @@ class TextEditor extends Model
# within the transaction.
abortTransaction: -> @buffer.abortTransaction()
# Extended: Set the time interval over which undo/redo operations are grouped.
#
# * `interval` A {Number} of milliseconds within which operations should be
# grouped with respec to undo/redo
# * `fn` A {Function} to call with the given interval setting
withGroupingInterval: (interval, fn) ->
previousInterval = @groupingInterval
@groupingInterval = interval
try
fn()
finally
@groupingInterval = previousInterval
###
Section: TextEditor Coordinates
###