diff --git a/spec/app/edit-session-spec.coffee b/spec/app/edit-session-spec.coffee index 670152485..3347450e0 100644 --- a/spec/app/edit-session-spec.coffee +++ b/spec/app/edit-session-spec.coffee @@ -1571,3 +1571,16 @@ describe "EditSession", -> editSession.deleteLine() expect(buffer.getLineCount()).toBe(1) expect(buffer.getText()).toBe('') + + describe ".tranpose()", -> + it "swaps two characters", -> + editSession.buffer.setText("abc") + editSession.setCursorScreenPosition([0, 1]) + editSession.transpose() + expect(editSession.lineForBufferRow(0)).toBe 'bac' + + it "reverses a selection", -> + editSession.buffer.setText("xabcz") + editSession.setSelectedBufferRange([[0, 1], [0, 4]]) + editSession.transpose() + expect(editSession.lineForBufferRow(0)).toBe 'xcbaz' diff --git a/src/app/edit-session.coffee b/src/app/edit-session.coffee index 501f9de8b..e861d00ac 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() + selection.selectRight() + text = selection.getText() + selection.delete() + selection.cursor.moveLeft() + selection.insertText text + else + selection.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'