From e87cb34d1d3ce1bfcdbcf19fa962c225d28d2af0 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Thu, 4 Oct 2012 16:32:55 -0700 Subject: [PATCH] Support selecting inserted text --- spec/extensions/editor-command-spec.coffee | 19 +++++++++++++++++++ src/app/editor.coffee | 2 +- src/app/selection.coffee | 5 ++++- src/extensions/editor-command.coffee | 8 +++----- 4 files changed, 27 insertions(+), 7 deletions(-) diff --git a/spec/extensions/editor-command-spec.coffee b/spec/extensions/editor-command-spec.coffee index eda5d9c7e..da584fb19 100644 --- a/spec/extensions/editor-command-spec.coffee +++ b/spec/extensions/editor-command-spec.coffee @@ -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 diff --git a/src/app/editor.coffee b/src/app/editor.coffee index 3da6a88a1..41c69752d 100644 --- a/src/app/editor.coffee +++ b/src/app/editor.coffee @@ -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() diff --git a/src/app/selection.coffee b/src/app/selection.coffee index 0e0b711f7..b666ce8e5 100644 --- a/src/app/selection.coffee +++ b/src/app/selection.coffee @@ -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 diff --git a/src/extensions/editor-command.coffee b/src/extensions/editor-command.coffee index 426bf65c3..8f2e72ab8 100644 --- a/src/extensions/editor-command.coffee +++ b/src/extensions/editor-command.coffee @@ -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