From aba968acd9f67c7052abd9665b332c7c4b723ecd Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Thu, 5 Apr 2012 17:39:40 -0600 Subject: [PATCH] Tab key inserts spaces or a tab character depending on Editor.prototype.softTabs setting --- spec/app/editor-spec.coffee | 15 +++++++++++++++ src/app/editor.coffee | 8 ++++++++ src/app/keymaps/editor.coffee | 3 ++- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/spec/app/editor-spec.coffee b/spec/app/editor-spec.coffee index d3ebf64e5..c74e28ef6 100644 --- a/spec/app/editor-spec.coffee +++ b/spec/app/editor-spec.coffee @@ -1621,6 +1621,21 @@ describe "Editor", -> editor.trigger 'delete-to-end-of-word' expect(buffer.lineForRow(1)).toBe ' var sort = function(it) {' + describe "tab", -> + describe "if editor.softTabs is true (the default)", -> + it "inserts atom.tabText into the buffer", -> + tabRegex = new RegExp("^#{atom.tabText}") + expect(buffer.lineForRow(0)).not.toMatch(tabRegex) + editor.trigger 'tab' + expect(buffer.lineForRow(0)).toMatch(tabRegex) + + describe "if editor.softTabs is false", -> + it "inserts a tab character into the buffer", -> + editor.softTabs = false + expect(buffer.lineForRow(0)).not.toMatch(/^\t/) + editor.trigger 'tab' + expect(buffer.lineForRow(0)).toMatch(/^\t/) + describe "undo/redo", -> it "undoes/redoes the last change", -> buffer.insert [0, 0], "foo" diff --git a/src/app/editor.coffee b/src/app/editor.coffee index 8b1892196..187cba191 100644 --- a/src/app/editor.coffee +++ b/src/app/editor.coffee @@ -37,6 +37,7 @@ class Editor extends View autoIndent: null lineCache: null isFocused: false + softTabs: true initialize: ({buffer}) -> requireStylesheet 'editor.css' @@ -67,6 +68,7 @@ class Editor extends View @on 'backspace-to-beginning-of-word', => @backspaceToBeginningOfWord() @on 'delete', => @delete() @on 'delete-to-end-of-word', => @deleteToEndOfWord() + @on 'tab', => @insertTab() @on 'cut', => @cutSelection() @on 'copy', => @copySelection() @on 'paste', => @paste() @@ -405,6 +407,12 @@ class Editor extends View insertText: (text) -> @compositeSelection.insertText(text) + insertTab: -> + if @softTabs + @compositeSelection.insertText(atom.tabText) + else + @compositeSelection.insertText('\t') + cutSelection: -> @compositeSelection.cut() copySelection: -> @compositeSelection.copy() paste: -> @insertText($native.readFromPasteboard()) diff --git a/src/app/keymaps/editor.coffee b/src/app/keymaps/editor.coffee index 0c90564c3..258401771 100644 --- a/src/app/keymaps/editor.coffee +++ b/src/app/keymaps/editor.coffee @@ -15,6 +15,7 @@ window.keymap.bindKeys '.editor', 'shift-up': 'select-up' 'shift-down': 'select-down' enter: 'newline' + tab: 'tab' backspace: 'backspace' 'delete': 'delete' 'meta-x': 'cut' @@ -27,4 +28,4 @@ window.keymap.bindKeys '.editor', 'alt-meta-left': 'split-left' 'alt-meta-right': 'split-right' 'alt-meta-up': 'split-up' - 'alt-meta-down': 'split-down' \ No newline at end of file + 'alt-meta-down': 'split-down'