From 18221d29b671626d997fbf9a87bad3a453181ed6 Mon Sep 17 00:00:00 2001 From: Harish Ved Date: Mon, 26 Sep 2016 23:23:12 +0530 Subject: [PATCH 1/2] Adds feature: Restore column position after editor:delete-line --- src/selection.coffee | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/selection.coffee b/src/selection.coffee index 8e9bf827e..30faf6699 100644 --- a/src/selection.coffee +++ b/src/selection.coffee @@ -487,6 +487,7 @@ class Selection extends Model deleteLine: -> if @isEmpty() start = @cursor.getScreenRow() + startColumn = @cursor.getScreenColumn() range = @editor.bufferRowsForScreenRows(start, start + 1) if range[1] > range[0] @editor.buffer.deleteRows(range[0], range[1] - 1) @@ -496,9 +497,11 @@ class Selection extends Model range = @getBufferRange() start = range.start.row end = range.end.row + startColumn = range.start.column if end isnt @editor.buffer.getLastRow() and range.end.column is 0 end-- @editor.buffer.deleteRows(start, end) + @cursor.setScreenPosition({row: @cursor.getScreenRow(), column: startColumn}) # Public: Joins the current line with the one below it. Lines will # be separated by a single space. From 60562edfe0a4b18b6b8e7e2539409f9a7f2e5fac Mon Sep 17 00:00:00 2001 From: Harish Ved Date: Tue, 27 Sep 2016 08:53:53 +0530 Subject: [PATCH 2/2] Add specs for editor:delete-line --- spec/text-editor-spec.coffee | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/spec/text-editor-spec.coffee b/spec/text-editor-spec.coffee index 1737abe7c..f0ac9c62a 100644 --- a/spec/text-editor-spec.coffee +++ b/spec/text-editor-spec.coffee @@ -4717,6 +4717,39 @@ describe "TextEditor", -> expect(buffer.lineForRow(0)).toBe(line2) expect(buffer.getLineCount()).toBe(count - 2) + it "restores cursor position for multiple cursors", -> + line = Array(9).join('0123456789') + editor.setText([1..5].map(-> line).join('\n')) + editor.setCursorScreenPosition([0, 5]) + editor.addCursorAtScreenPosition([2, 8]) + editor.deleteLine() + expect(editor.getCursors().length).toBe 2 + [cursor1, cursor2] = editor.getCursors() + pos = cursor1.getScreenPosition() + expect(pos.row).toBe(0) + expect(pos.column).toBe(5) + pos = cursor2.getScreenPosition() + expect(pos.row).toBe(1) + expect(pos.column).toBe(8) + + it "restores cursor position for multiple selections", -> + line = Array(9).join('0123456789') + editor.setText([1..5].map(-> line).join('\n')) + editor.setCursorScreenPosition([0, 5]) + editor.setSelectedBufferRanges([ + [[0, 5], [0, 8]], + [[2, 4], [2, 15]] + ]) + editor.deleteLine() + expect(editor.getCursors().length).toBe 2 + [cursor1, cursor2] = editor.getCursors() + pos = cursor1.getScreenPosition() + expect(pos.row).toBe(0) + expect(pos.column).toBe(5) + pos = cursor2.getScreenPosition() + expect(pos.row).toBe(1) + expect(pos.column).toBe(4) + it "deletes a line only once when multiple selections are on the same line", -> line1 = buffer.lineForRow(1) count = buffer.getLineCount()