diff --git a/spec/app/edit-session-spec.coffee b/spec/app/edit-session-spec.coffee index bd4537617..2ab1f69ce 100644 --- a/spec/app/edit-session-spec.coffee +++ b/spec/app/edit-session-spec.coffee @@ -708,6 +708,18 @@ describe "EditSession", -> expect(editSession.selectMarker('bogus')).toBeFalsy() expect(editSession.getSelectedBufferRange()).toEqual rangeBefore + describe ".addSelectionBelow()", -> + it "selects the same region of the line below current selections if possible", -> + editSession.setSelectedBufferRange([[3, 16], [3, 21]]) + editSession.addSelectionForBufferRange([[3, 25], [3, 34]]) + editSession.addSelectionBelow() + expect(editSession.getSelectedBufferRanges()).toEqual [ + [[3, 16], [3, 21]] + [[3, 25], [3, 34]] + [[4, 16], [4, 21]] + [[4, 25], [4, 29]] + ] + describe "when the cursor is moved while there is a selection", -> makeSelection = -> selection.setBufferRange [[1, 2], [1, 5]] diff --git a/src/app/edit-session.coffee b/src/app/edit-session.coffee index a17c914f0..a24420e48 100644 --- a/src/app/edit-session.coffee +++ b/src/app/edit-session.coffee @@ -761,6 +761,9 @@ class EditSession selectLine: -> @expandSelectionsForward (selection) => selection.selectLine() + addSelectionBelow: -> + @expandSelectionsForward (selection) => selection.addSelectionBelow() + transpose: -> @mutateSelectedText (selection) => if selection.isEmpty() diff --git a/src/app/editor.coffee b/src/app/editor.coffee index 7f57fe9b7..026a00e49 100644 --- a/src/app/editor.coffee +++ b/src/app/editor.coffee @@ -122,6 +122,7 @@ class Editor extends View 'editor:select-to-beginning-of-line': @selectToBeginningOfLine 'editor:select-to-end-of-word': @selectToEndOfWord 'editor:select-to-beginning-of-word': @selectToBeginningOfWord + 'editor:add-selection-below': @addSelectionBelow 'editor:select-line': @selectLine 'editor:transpose': @transpose 'editor:upper-case': @upperCase @@ -211,6 +212,7 @@ class Editor extends View selectAll: -> @activeEditSession.selectAll() selectToBeginningOfLine: -> @activeEditSession.selectToBeginningOfLine() selectToEndOfLine: -> @activeEditSession.selectToEndOfLine() + addSelectionBelow: -> @activeEditSession.addSelectionBelow() selectToBeginningOfWord: -> @activeEditSession.selectToBeginningOfWord() selectToEndOfWord: -> @activeEditSession.selectToEndOfWord() selectWord: -> @activeEditSession.selectWord() diff --git a/src/app/keymaps/editor.cson b/src/app/keymaps/editor.cson index 52522ce73..1fcbbd6a6 100644 --- a/src/app/keymaps/editor.cson +++ b/src/app/keymaps/editor.cson @@ -9,6 +9,7 @@ 'ctrl-]': 'editor:unfold-current-row' 'ctrl-{': 'editor:fold-all' 'ctrl-}': 'editor:unfold-all' + 'ctrl-shift-down': 'editor:add-selection-below' 'alt-meta-ctrl-f': 'editor:fold-selection' 'shift-tab': 'editor:outdent-selected-rows' 'meta-[': 'editor:outdent-selected-rows' diff --git a/src/app/selection.coffee b/src/app/selection.coffee index 817769281..0fa7ae295 100644 --- a/src/app/selection.coffee +++ b/src/app/selection.coffee @@ -148,6 +148,12 @@ class Selection selectToEndOfWord: -> @modifySelection => @cursor.moveToEndOfWord() + addSelectionBelow: -> + range = @getBufferRange().copy() + range.start.row++ + range.end.row++ + @editSession.addSelectionForBufferRange(range) + insertText: (text, options={}) -> oldBufferRange = @getBufferRange() @editSession.destroyFoldsContainingBufferRow(oldBufferRange.end.row)