If the cursor is at any buffer position inside a fold, backspace deletes the folded text

This commit is contained in:
Nathan Sobo
2012-06-15 14:41:05 -06:00
parent 8d516fe4fe
commit 95622dc64e
4 changed files with 18 additions and 6 deletions

View File

@@ -129,6 +129,13 @@ class DisplayBuffer
largestFoldStartingAtScreenRow: (screenRow) ->
@largestFoldStartingAtBufferRow(@bufferRowForScreenRow(screenRow))
largestFoldContainingBufferRow: (bufferRow) ->
largestFold = null
for currentBufferRow in [bufferRow..0]
if fold = @largestFoldStartingAtBufferRow(currentBufferRow)
largestFold = fold if fold.endRow >= bufferRow
largestFold
screenLineRangeForBufferRange: (bufferRange) ->
@expandScreenRangeToLineEnds(
@lineMap.screenRangeForBufferRange(

View File

@@ -207,6 +207,9 @@ class EditSession
largestFoldStartingAtBufferRow: (bufferRow) ->
@displayBuffer.largestFoldStartingAtBufferRow(bufferRow)
largestFoldContainingBufferRow: (bufferRow) ->
@displayBuffer.largestFoldContainingBufferRow(bufferRow)
largestFoldStartingAtScreenRow: (screenRow) ->
@displayBuffer.largestFoldStartingAtScreenRow(screenRow)

View File

@@ -145,21 +145,23 @@ class Selection
@deleteSelectedText()
delete: ->
deleteNewlinesAfterFolds = true
if @isEmpty()
if @cursor.isAtEndOfLine() and fold = @editSession.largestFoldStartingAtScreenRow(@cursor.getCurrentScreenRow() + 1)
@selectToBufferPosition(fold.getBufferRange().end)
deleteNewlinesAfterFolds = false
else
@selectRight()
@deleteSelectedText()
@deleteSelectedText({ deleteNewlinesAfterFolds })
deleteToEndOfWord: ->
@selectToEndOfWord() if @isEmpty()
@deleteSelectedText()
deleteSelectedText: ->
deleteSelectedText: (options = {}) ->
bufferRange = @getBufferRange()
if fold = @editSession.largestFoldStartingAtBufferRow(bufferRange.end.row)
bufferRange = bufferRange.union(fold.getBufferRange(includeNewline: true))
if fold = @editSession.largestFoldContainingBufferRow(bufferRange.end.row)
bufferRange = bufferRange.union(fold.getBufferRange(includeNewline: options.deleteNewlinesAfterFolds ? true))
@editSession.buffer.delete(bufferRange) unless bufferRange.isEmpty()
if @cursor