Delete at the end of a line above a fold deletes the folded lines (leaving a newline)

This commit is contained in:
Corey Johnson & Nathan Sobo 2012-06-14 16:58:29 -06:00
parent daa688b1e1
commit 1dfbaf67d1
5 changed files with 39 additions and 2 deletions

View File

@ -911,6 +911,30 @@ describe "EditSession", ->
editSession.delete()
expect(buffer.lineForRow(12)).toBe '};'
describe "when the cursor is on the end of a line above a fold", ->
it "only deletes the lines inside the fold", ->
editSession.toggleFoldAtBufferRow(4)
editSession.setCursorScreenPosition([3, Infinity])
cursorPositionBefore = editSession.getCursorScreenPosition()
editSession.delete()
expect(buffer.lineForRow(3)).toBe " var pivot = items.shift(), current, left = [], right = [];"
expect(buffer.lineForRow(4)).toBe " return sort(left).concat(pivot).concat(sort(right));"
expect(editSession.getCursorScreenPosition()).toEqual cursorPositionBefore
describe "when the cursor is in the middle a line above a fold", ->
it "deletes as normal", ->
editSession.toggleFoldAtBufferRow(4)
editSession.setCursorScreenPosition([3, 4])
cursorPositionBefore = editSession.getCursorScreenPosition()
editSession.delete()
expect(buffer.lineForRow(3)).toBe " ar pivot = items.shift(), current, left = [], right = [];"
expect(editSession.lineForScreenRow(4).fold).toBeDefined()
expect(editSession.getCursorScreenPosition()).toEqual [3, 4]
describe "when the cursor is on a folded line", ->
it "removes the lines contained by the fold", ->
editSession.createFold(2,4)

View File

@ -155,4 +155,7 @@ class Cursor
getCurrentLineBufferRange: ->
@editSession.bufferRangeForBufferRow(@getCurrentBufferRow())
isAtEndOfLine: ->
@getBufferPosition().isEqual(@getCurrentLineBufferRange().end)
_.extend Cursor.prototype, EventEmitter

View File

@ -126,6 +126,9 @@ class DisplayBuffer
return unless folds = @activeFolds[bufferRow]
(folds.sort (a, b) -> b.endRow - a.endRow)[0]
largestFoldStartingAtScreenRow: (screenRow) ->
@largestFoldStartingAtBufferRow(@bufferRowForScreenRow(screenRow))
screenLineRangeForBufferRange: (bufferRange) ->
@expandScreenRangeToLineEnds(
@lineMap.screenRangeForBufferRange(

View File

@ -194,7 +194,7 @@ class EditSession
@displayBuffer.destroyFoldsContainingBufferRow(bufferRow)
unfoldCurrentRow: ->
@displayBuffer.largestFoldStartingAtBufferRow(@getLastCursor().getCurrentBufferRow())?.destroy()
@largestFoldStartingAtBufferRow(@getLastCursor().getCurrentBufferRow())?.destroy()
destroyFold: (foldId) ->
fold = @displayBuffer.foldsById[foldId]
@ -207,6 +207,9 @@ class EditSession
largestFoldStartingAtBufferRow: (bufferRow) ->
@displayBuffer.largestFoldStartingAtBufferRow(bufferRow)
largestFoldStartingAtScreenRow: (screenRow) ->
@displayBuffer.largestFoldStartingAtScreenRow(screenRow)
autoIndentTextAfterBufferPosition: (text, bufferPosition) ->
return { text } unless @autoIndent
@tokenizedBuffer.autoIndentTextAfterBufferPosition(text, bufferPosition)

View File

@ -145,7 +145,11 @@ class Selection
@deleteSelectedText()
delete: ->
@selectRight() if @isEmpty()
if @isEmpty()
if @cursor.isAtEndOfLine() and fold = @editSession.largestFoldStartingAtScreenRow(@cursor.getCurrentScreenRow() + 1)
@selectToBufferPosition(fold.getBufferRange().end)
else
@selectRight()
@deleteSelectedText()
deleteToEndOfWord: ->