From 222e12d29dd59cc70665c8b76c10dab046a878ec Mon Sep 17 00:00:00 2001 From: Corey Johnson & Nathan Sobo Date: Tue, 12 Jun 2012 16:48:08 -0700 Subject: [PATCH] Backspace in column 0 below a fold absorbs line into fold --- spec/app/edit-session-spec.coffee | 11 +++++++++++ src/app/edit-session.coffee | 3 +++ src/app/editor.coffee | 2 +- src/app/selection.coffee | 11 ++++++++++- 4 files changed, 25 insertions(+), 2 deletions(-) diff --git a/spec/app/edit-session-spec.coffee b/spec/app/edit-session-spec.coffee index 1d8320f4f..1ef3af65f 100644 --- a/spec/app/edit-session-spec.coffee +++ b/spec/app/edit-session-spec.coffee @@ -764,6 +764,17 @@ describe "EditSession", -> editSession.setCursorScreenPosition(row: 0, column: 0) editSession.backspace() + describe "when the cursor is on the first column of a line below a fold", -> + it "absorbs the current line into the fold", -> + editSession.setCursorScreenPosition([4,0]) + editSession.toggleFold() + editSession.setCursorScreenPosition([5,0]) + editSession.backspace() + + + expect(buffer.lineForRow(7)).toBe " } return sort(left).concat(pivot).concat(sort(right));" + expect(buffer.lineForRow(8)).toBe " };" + describe "when there are multiple cursors", -> describe "when cursors are on the same line", -> it "removes the characters preceding each cursor", -> diff --git a/src/app/edit-session.coffee b/src/app/edit-session.coffee index 871e580ee..90f1de063 100644 --- a/src/app/edit-session.coffee +++ b/src/app/edit-session.coffee @@ -198,6 +198,9 @@ class EditSession destroyFoldsContainingBufferRow: (bufferRow) -> @renderer.destroyFoldsContainingBufferRow(bufferRow) + isFoldedAtScreenRow: (screenRow) -> + @screenLineForRow(screenRow).fold? + toggleLineCommentsInRange: (range) -> @renderer.toggleLineCommentsInRange(range) diff --git a/src/app/editor.coffee b/src/app/editor.coffee index fcdc29537..a579d9538 100644 --- a/src/app/editor.coffee +++ b/src/app/editor.coffee @@ -341,7 +341,7 @@ class Editor extends View @screenLineCount() - 1 isFoldedAtScreenRow: (screenRow) -> - @screenLineForRow(screenRow).fold? + @activeEditSession.isFoldedAtScreenRow(screenRow) destroyFoldsContainingBufferRow: (bufferRow) -> @renderer.destroyFoldsContainingBufferRow(bufferRow) diff --git a/src/app/selection.coffee b/src/app/selection.coffee index fe2d16abe..3520e2e67 100644 --- a/src/app/selection.coffee +++ b/src/app/selection.coffee @@ -86,6 +86,9 @@ class Selection selectToScreenPosition: (position) -> @modifySelection => @cursor.setScreenPosition(position) + selectToBufferPosition: (position) -> + @modifySelection => @cursor.setBufferPosition(position) + selectRight: -> @modifySelection => @cursor.moveRight() @@ -131,7 +134,13 @@ class Selection backspace: -> @editSession.destroyFoldsContainingBufferRow(@getBufferRange().end.row) - @selectLeft() if @isEmpty() + + if @isEmpty() + if @editSession.isFoldedAtScreenRow(@cursor.getCurrentScreenRow() - 1) + @selectToBufferPosition([@cursor.getCurrentBufferRow() - 1, Infinity]) + else + @selectLeft() + @deleteSelectedText() backspaceToBeginningOfWord: ->