From f5f18abbf05a1ae9e8f9fc217dacace580faa8c6 Mon Sep 17 00:00:00 2001 From: Chris Wanstrath Date: Mon, 8 Oct 2012 20:08:07 -0700 Subject: [PATCH 1/3] ctrl-t: transpose --- spec/app/edit-session-spec.coffee | 20 ++++++++++++++++++++ src/app/edit-session.coffee | 11 +++++++++++ src/app/editor.coffee | 2 ++ src/app/keymaps/apple.coffee | 1 + 4 files changed, 34 insertions(+) diff --git a/spec/app/edit-session-spec.coffee b/spec/app/edit-session-spec.coffee index 670152485..e50d2cf9e 100644 --- a/spec/app/edit-session-spec.coffee +++ b/spec/app/edit-session-spec.coffee @@ -1571,3 +1571,23 @@ describe "EditSession", -> editSession.deleteLine() expect(buffer.getLineCount()).toBe(1) expect(buffer.getText()).toBe('') + + describe ".tranpose()", -> + it "swaps two characters", -> + editSession.setCursorScreenPosition([1, 0]) + editSession.insertText('abc') + editSession.cutToEndOfLine() + expect(buffer.lineForRow(1)).toBe 'abc' + editSession.setCursorScreenPosition([1, 1]) + editSession.transpose() + expect(buffer.lineForRow(1)).toBe 'bac' + + it "reverses a selection", -> + editSession.setCursorScreenPosition([1, 0]) + editSession.insertText('xabcz') + editSession.cutToEndOfLine() + expect(buffer.lineForRow(1)).toBe 'xabcz' + editSession.setCursorScreenPosition([1, 0]) + editSession.setSelectedBufferRange([[1, 1], [1, 4]]) + editSession.transpose() + expect(buffer.lineForRow(1)).toBe 'xcbaz' diff --git a/src/app/edit-session.coffee b/src/app/edit-session.coffee index 501f9de8b..388db867a 100644 --- a/src/app/edit-session.coffee +++ b/src/app/edit-session.coffee @@ -505,6 +505,17 @@ class EditSession selectLine: -> @expandSelectionsForward (selection) => selection.selectLine() + transpose: -> + @mutateSelectedText (selection) => + if selection.isEmpty() + @selectRight() + text = selection.getText() + selection.delete() + @moveCursorLeft() + @insertText text + else + @insertText selection.getText().split('').reverse().join('') + expandLastSelectionOverLine: -> @getLastSelection().expandOverLine() diff --git a/src/app/editor.coffee b/src/app/editor.coffee index aef3fc3aa..3da6a88a1 100644 --- a/src/app/editor.coffee +++ b/src/app/editor.coffee @@ -131,6 +131,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:transpose': @transpose unless @mini _.extend editorBindings, @@ -203,6 +204,7 @@ class Editor extends View selectToEndOfWord: -> @activeEditSession.selectToEndOfWord() selectWord: -> @activeEditSession.selectWord() selectToScreenPosition: (position) -> @activeEditSession.selectToScreenPosition(position) + transpose: -> @activeEditSession.transpose() clearSelections: -> @activeEditSession.clearSelections() backspace: -> @activeEditSession.backspace() diff --git a/src/app/keymaps/apple.coffee b/src/app/keymaps/apple.coffee index e0b661b61..a2285c067 100644 --- a/src/app/keymaps/apple.coffee +++ b/src/app/keymaps/apple.coffee @@ -15,3 +15,4 @@ window.keymap.bindKeys '.editor' 'alt-shift-right': 'editor:select-to-end-of-word' 'alt-backspace': 'editor:backspace-to-beginning-of-word' 'alt-delete': 'editor:delete-to-end-of-word' + 'ctrl-t': 'editor:transpose' From fa10a8e6ac530ca621644493c19d34e1a9360971 Mon Sep 17 00:00:00 2001 From: Chris Wanstrath Date: Mon, 8 Oct 2012 20:13:16 -0700 Subject: [PATCH 2/3] use the local selection instance --- src/app/edit-session.coffee | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/app/edit-session.coffee b/src/app/edit-session.coffee index 388db867a..e861d00ac 100644 --- a/src/app/edit-session.coffee +++ b/src/app/edit-session.coffee @@ -508,13 +508,13 @@ class EditSession transpose: -> @mutateSelectedText (selection) => if selection.isEmpty() - @selectRight() + selection.selectRight() text = selection.getText() selection.delete() - @moveCursorLeft() - @insertText text + selection.cursor.moveLeft() + selection.insertText text else - @insertText selection.getText().split('').reverse().join('') + selection.insertText selection.getText().split('').reverse().join('') expandLastSelectionOverLine: -> @getLastSelection().expandOverLine() From a2f2e388d5ea8a5f19591776b429d780cf6f2c8c Mon Sep 17 00:00:00 2001 From: Corey Johnson Date: Tue, 9 Oct 2012 11:02:39 -0700 Subject: [PATCH 3/3] Test :lipstick: Instead of inserting text into an existing buffer, I replaced all text in the buffer to make the test easier to understand. --- spec/app/edit-session-spec.coffee | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/spec/app/edit-session-spec.coffee b/spec/app/edit-session-spec.coffee index e50d2cf9e..3347450e0 100644 --- a/spec/app/edit-session-spec.coffee +++ b/spec/app/edit-session-spec.coffee @@ -1574,20 +1574,13 @@ describe "EditSession", -> describe ".tranpose()", -> it "swaps two characters", -> - editSession.setCursorScreenPosition([1, 0]) - editSession.insertText('abc') - editSession.cutToEndOfLine() - expect(buffer.lineForRow(1)).toBe 'abc' - editSession.setCursorScreenPosition([1, 1]) + editSession.buffer.setText("abc") + editSession.setCursorScreenPosition([0, 1]) editSession.transpose() - expect(buffer.lineForRow(1)).toBe 'bac' + expect(editSession.lineForBufferRow(0)).toBe 'bac' it "reverses a selection", -> - editSession.setCursorScreenPosition([1, 0]) - editSession.insertText('xabcz') - editSession.cutToEndOfLine() - expect(buffer.lineForRow(1)).toBe 'xabcz' - editSession.setCursorScreenPosition([1, 0]) - editSession.setSelectedBufferRange([[1, 1], [1, 4]]) + editSession.buffer.setText("xabcz") + editSession.setSelectedBufferRange([[0, 1], [0, 4]]) editSession.transpose() - expect(buffer.lineForRow(1)).toBe 'xcbaz' + expect(editSession.lineForBufferRow(0)).toBe 'xcbaz'