mirror of
https://github.com/pulsar-edit/pulsar.git
synced 2024-09-20 15:37:46 +03:00
Delete at the end of a line above a fold deletes the folded lines (leaving a newline)
This commit is contained in:
parent
daa688b1e1
commit
1dfbaf67d1
@ -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)
|
||||
|
@ -155,4 +155,7 @@ class Cursor
|
||||
getCurrentLineBufferRange: ->
|
||||
@editSession.bufferRangeForBufferRow(@getCurrentBufferRow())
|
||||
|
||||
isAtEndOfLine: ->
|
||||
@getBufferPosition().isEqual(@getCurrentLineBufferRange().end)
|
||||
|
||||
_.extend Cursor.prototype, EventEmitter
|
||||
|
@ -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(
|
||||
|
@ -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)
|
||||
|
@ -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: ->
|
||||
|
Loading…
Reference in New Issue
Block a user