Support selecting inserted text

This commit is contained in:
Kevin Sawicki
2012-10-04 16:32:55 -07:00
parent ceb496e202
commit e87cb34d1d
4 changed files with 27 additions and 7 deletions

View File

@@ -91,6 +91,25 @@ describe "EditorCommand", ->
editor.trigger 'devowel'
expect(editor.lineForBufferRow(0)).toBe 'vr qcksrt = fnctn () {'
expect(editor.getTextInRange(editor.getSelection().getBufferRange())).toBe 'vr qcksrt = fnctn () {'
expect(editor.getCursorBufferPosition()).toBe(editor.getSelection().getBufferRange().end)
it "maintains reversed selections", ->
class VowelRemover extends EditorCommand
@getKeymaps: (editor) ->
'meta-V': 'devowel'
@execute: (editor, event) ->
@replaceSelectedText editor, (text) ->
text.replace(/[aeiouy]/gi, '')
VowelRemover.activate(rootView)
editor.moveCursorToTop()
editor.moveCursorToEndOfLine()
editor.selectToBeginningOfLine()
editor.trigger 'devowel'
expect(editor.lineForBufferRow(0)).toBe 'vr qcksrt = fnctn () {'
expect(editor.getTextInRange(editor.getSelection().getBufferRange())).toBe 'vr qcksrt = fnctn () {'
expect(editor.getCursorBufferPosition()).toBe(editor.getSelection().getBufferRange().start)
it "doesn't transform empty selections", ->
callbackCount = 0

View File

@@ -213,7 +213,7 @@ class Editor extends View
deleteToEndOfWord: -> @activeEditSession.deleteToEndOfWord()
deleteLine: -> @activeEditSession.deleteLine()
cutToEndOfLine: -> @activeEditSession.cutToEndOfLine()
insertText: (text) -> @activeEditSession.insertText(text)
insertText: (text, options) -> @activeEditSession.insertText(text, options)
insertNewline: -> @activeEditSession.insertNewline()
insertNewlineBelow: -> @activeEditSession.insertNewlineBelow()
indent: -> @activeEditSession.indent()

View File

@@ -139,7 +139,10 @@ class Selection
wasReversed = @isReversed()
@clear()
newBufferRange = @editSession.buffer.change(oldBufferRange, text)
@cursor.setBufferPosition(newBufferRange.end, skipAtomicTokens: true) if wasReversed
if options.select
@setBufferRange(newBufferRange, reverse: wasReversed)
else
@cursor.setBufferPosition(newBufferRange.end, skipAtomicTokens: true) if wasReversed
autoIndent = options.autoIndent ? true

View File

@@ -26,10 +26,8 @@ class EditorCommand
selection = editor.getSelection()
return false if selection.isEmpty()
range = selection.getBufferRange()
reverse = selection.isReversed()
text = replace(editor.getTextInRange(range))
text = replace(editor.getTextInRange(selection.getBufferRange()))
return false if text is null or text is undefined
editor.insertText(text)
selection.setBufferRange(range, {reverse})
editor.insertText(text, select: true)
true