Add delete line support bound to meta-d key

This commit is contained in:
Kevin Sawicki
2012-09-19 14:53:55 -07:00
parent e9abf1e3b9
commit b18627ab9b
6 changed files with 68 additions and 6 deletions

View File

@@ -162,13 +162,19 @@ class Buffer
new Point(row, index)
deleteRow: (row) ->
range = null
if row == @getLastRow()
range = new Range([row - 1, @lineLengthForRow(row - 1)], [row, @lineLengthForRow(row)])
else
range = new Range([row, 0], [row + 1, 0])
@deleteRows(row, row)
@change(range, '')
deleteRows: (start, end) ->
startPoint = null
endPoint = null
if end == @getLastRow()
startPoint = [start - 1, @lineLengthForRow(start - 1)]
endPoint = [end, @lineLengthForRow(end)]
else
startPoint = [start, 0]
endPoint = [end + 1, 0]
@change(new Range(startPoint, endPoint), '')
insert: (point, text) ->
@change(new Range(point, point), text)

View File

@@ -167,6 +167,9 @@ class EditSession
deleteToEndOfWord: ->
@mutateSelectedText (selection) -> selection.deleteToEndOfWord()
deleteLine: ->
@mutateSelectedText (selection) -> selection.deleteLine()
indentSelectedRows: ->
@mutateSelectedText (selection) -> selection.indentSelectedRows()

View File

@@ -111,6 +111,7 @@ class Editor extends View
'backspace-to-beginning-of-word': @backspaceToBeginningOfWord
'delete': @delete
'delete-to-end-of-word': @deleteToEndOfWord
'delete-line': @deleteLine
'cut-to-end-of-line': @cutToEndOfLine
'cut': @cutSelection
'copy': @copySelection
@@ -209,6 +210,7 @@ class Editor extends View
backspaceToBeginningOfWord: -> @activeEditSession.backspaceToBeginningOfWord()
delete: -> @activeEditSession.delete()
deleteToEndOfWord: -> @activeEditSession.deleteToEndOfWord()
deleteLine: -> @activeEditSession.deleteLine()
cutToEndOfLine: -> @activeEditSession.cutToEndOfLine()
insertText: (text) -> @activeEditSession.insertText(text)
insertNewline: -> @activeEditSession.insertNewline()

View File

@@ -11,6 +11,7 @@ window.keymap.bindKeys '.editor',
'backspace': 'backspace'
'shift-backspace': 'backspace'
'delete': 'delete'
'meta-d': 'delete-line'
'meta-x': 'cut'
'meta-c': 'copy'
'meta-v': 'paste'

View File

@@ -181,6 +181,17 @@ class Selection
@editSession.buffer.delete(bufferRange) unless bufferRange.isEmpty()
@cursor?.setBufferPosition(bufferRange.start)
deleteLine: ->
if @isEmpty()
@editSession.buffer.deleteRow(@cursor.getBufferPosition().row)
else
bufferRange = @getBufferRange()
start = bufferRange.start.row
end = bufferRange.end.row
if end isnt @editSession.buffer.getLastRow() and bufferRange.end.column is 0
end--
@editSession.buffer.deleteRows(start, end)
indentSelectedRows: ->
range = @getBufferRange()
for row in [range.start.row..range.end.row]