diff --git a/spec/text-editor-spec.coffee b/spec/text-editor-spec.coffee index 6a46992ff..1d9a4b3fb 100644 --- a/spec/text-editor-spec.coffee +++ b/spec/text-editor-spec.coffee @@ -3810,6 +3810,27 @@ describe "TextEditor", -> runs -> expect(editor.softTabs).toBe true + describe "when editor.tabType changes", -> + beforeEach -> + atom.config.set('editor.tabType', 'auto') + + it "updates based on the value chosen", -> + waitsForPromise -> + atom.workspace.open('sample.js').then (editor) -> + expect(editor.getSoftTabs()).toBe true + atom.config.set('editor.tabType', 'hard') + expect(editor.getSoftTabs()).toBe false + atom.config.set('editor.tabType', 'auto') + expect(editor.getSoftTabs()).toBe true + + waitsForPromise -> + atom.workspace.open('sample-with-tabs.coffee').then (editor) -> + expect(editor.getSoftTabs()).toBe false + atom.config.set('editor.tabType', 'soft') + expect(editor.getSoftTabs()).toBe true + atom.config.set('editor.tabType', 'auto') + expect(editor.getSoftTabs()).toBe false + describe '.getTabLength()', -> describe 'when scoped settings are used', -> coffeeEditor = null diff --git a/src/text-editor.coffee b/src/text-editor.coffee index 293ed2b70..8d0d9b2d6 100644 --- a/src/text-editor.coffee +++ b/src/text-editor.coffee @@ -75,7 +75,7 @@ class TextEditor extends Model 'autoDecreaseIndentForBufferRow', 'toggleLineCommentForBufferRow', 'toggleLineCommentsForBufferRows', toProperty: 'languageMode' - constructor: ({softTabs, initialLine, initialColumn, tabLength, softWrapped, @displayBuffer, buffer, registerEditor, suppressCursorCreation, @mini, @placeholderText, lineNumberGutterVisible, largeFileMode}={}) -> + constructor: ({@softTabs, initialLine, initialColumn, tabLength, softWrapped, @displayBuffer, buffer, registerEditor, suppressCursorCreation, @mini, @placeholderText, lineNumberGutterVisible, largeFileMode}={}) -> super @emitter = new Emitter @@ -86,7 +86,9 @@ class TextEditor extends Model buffer ?= new TextBuffer @displayBuffer ?= new DisplayBuffer({buffer, tabLength, softWrapped, ignoreInvisibles: @mini, largeFileMode}) @buffer = @displayBuffer.buffer - @softTabs = @shouldUseSoftTabs(defaultValue: softTabs) + + @disposables.add atom.config.observe 'editor.tabType', scope: @getRootScopeDescriptor(), => + @softTabs = @shouldUseSoftTabs(defaultValue: @softTabs) for marker in @findMarkers(@getSelectionMarkerAttributes()) marker.setProperties(preserveFolds: true)