diff --git a/spec/app/editor-spec.coffee b/spec/app/editor-spec.coffee index c74e28ef6..32dd6b85e 100644 --- a/spec/app/editor-spec.coffee +++ b/spec/app/editor-spec.coffee @@ -1623,8 +1623,8 @@ describe "Editor", -> describe "tab", -> describe "if editor.softTabs is true (the default)", -> - it "inserts atom.tabText into the buffer", -> - tabRegex = new RegExp("^#{atom.tabText}") + it "inserts editor.tabText into the buffer", -> + tabRegex = new RegExp("^#{editor.tabText}") expect(buffer.lineForRow(0)).not.toMatch(tabRegex) editor.trigger 'tab' expect(buffer.lineForRow(0)).toMatch(tabRegex) diff --git a/spec/app/highlighter-spec.coffee b/spec/app/highlighter-spec.coffee index c30f74859..d0cd85361 100644 --- a/spec/app/highlighter-spec.coffee +++ b/spec/app/highlighter-spec.coffee @@ -139,18 +139,21 @@ describe "Highlighter", -> expect(event.newRange).toEqual new Range([2, 0], [7, buffer.lineForRow(7).length]) describe "when the buffer contains tab characters", -> - beforeEach -> - buffer = new Buffer(require.resolve('fixtures/sample-with-tabs.coffee')) - highlighter = new Highlighter(buffer) + tabText = null - it "always renders each tab as its own atomic token containing atom.tabText", -> + beforeEach -> + tabText = ' ' + buffer = new Buffer(require.resolve('fixtures/sample-with-tabs.coffee')) + highlighter = new Highlighter(buffer, tabText) + + it "always renders each tab as its own atomic token containing tabText", -> screenLine0 = highlighter.lineForScreenRow(0) - expect(screenLine0.text).toBe "# Econ 101#{atom.tabText}" + expect(screenLine0.text).toBe "# Econ 101#{tabText}" { tokens } = screenLine0 expect(tokens.length).toBe 2 expect(tokens[0].value).toBe "# Econ 101" - expect(tokens[1].value).toBe atom.tabText + expect(tokens[1].value).toBe tabText expect(tokens[1].type).toBe tokens[0].type expect(tokens[1].isAtomic).toBeTruthy() - expect(highlighter.lineForScreenRow(2).text).toBe "#{atom.tabText} buy()#{atom.tabText}while supply > demand" + expect(highlighter.lineForScreenRow(2).text).toBe "#{tabText} buy()#{tabText}while supply > demand" diff --git a/spec/app/renderer-spec.coffee b/spec/app/renderer-spec.coffee index 742dabf9a..5feb36849 100644 --- a/spec/app/renderer-spec.coffee +++ b/spec/app/renderer-spec.coffee @@ -2,10 +2,11 @@ Renderer = require 'renderer' Buffer = require 'buffer' describe "Renderer", -> - [renderer, buffer, changeHandler] = [] + [renderer, buffer, changeHandler, tabText] = [] beforeEach -> + tabText = ' ' buffer = new Buffer(require.resolve 'fixtures/sample.js') - renderer = new Renderer(buffer) + renderer = new Renderer(buffer, {tabText}) changeHandler = jasmine.createSpy 'changeHandler' renderer.on 'change', changeHandler @@ -608,7 +609,7 @@ describe "Renderer", -> buffer.insert([0, 0], '\t') expect(renderer.clipScreenPosition([0, 0])).toEqual [0, 0] expect(renderer.clipScreenPosition([0, 1])).toEqual [0, 0] - expect(renderer.clipScreenPosition([0, atom.tabText.length])).toEqual [0, atom.tabText.length] + expect(renderer.clipScreenPosition([0, tabText.length])).toEqual [0, tabText.length] describe "when skipAtomicTokens is true", -> it "wraps the screen positions in the middle of fold placeholders to the end of the placeholder", -> @@ -620,8 +621,8 @@ describe "Renderer", -> it "clips screen positions in the middle of atomic tab characters to the beginning of the character", -> buffer.insert([0, 0], '\t') expect(renderer.clipScreenPosition([0, 0], skipAtomicTokens: true)).toEqual [0, 0] - expect(renderer.clipScreenPosition([0, 1], skipAtomicTokens: true)).toEqual [0, atom.tabText.length] - expect(renderer.clipScreenPosition([0, atom.tabText.length], skipAtomicTokens: true)).toEqual [0, atom.tabText.length] + expect(renderer.clipScreenPosition([0, 1], skipAtomicTokens: true)).toEqual [0, tabText.length] + expect(renderer.clipScreenPosition([0, tabText.length], skipAtomicTokens: true)).toEqual [0, tabText.length] describe ".bufferRowsForScreenRows()", -> it "returns the buffer rows corresponding to each screen row in the given range", -> diff --git a/src/app/ace-outdent-adaptor.coffee b/src/app/ace-outdent-adaptor.coffee index 5e54d9fa4..c4674ac01 100644 --- a/src/app/ace-outdent-adaptor.coffee +++ b/src/app/ace-outdent-adaptor.coffee @@ -15,7 +15,7 @@ class AceOutdentAdaptor replace: (range, text) -> {row, column} = @editor.getCursorBufferPosition() start = range.start - end = {row: range.start.row, column: range.start.column + atom.tabText.length} + end = {row: range.start.row, column: range.start.column + @editor.tabText.length} @buffer.change(new Range(start, end), "") - @editor.setCursorBufferPosition({row, column: column - atom.tabText.length}) + @editor.setCursorBufferPosition({row, column: column - @editor.tabText.length}) diff --git a/src/app/atom.coffee b/src/app/atom.coffee index 8f3187857..7fe0d0bea 100644 --- a/src/app/atom.coffee +++ b/src/app/atom.coffee @@ -9,13 +9,11 @@ module.exports = class Atom keymap: null windows: null - tabText: null userConfigurationPath: null constructor: (@loadPath, nativeMethods)-> @windows = [] @setUpKeymap() - @tabText = " " @userConfigurationPath = fs.absolute "~/.atom/atom.coffee" setUpKeymap: -> diff --git a/src/app/editor.coffee b/src/app/editor.coffee index 187cba191..cbcb7ef00 100644 --- a/src/app/editor.coffee +++ b/src/app/editor.coffee @@ -38,6 +38,7 @@ class Editor extends View lineCache: null isFocused: false softTabs: true + tabText: ' ' initialize: ({buffer}) -> requireStylesheet 'editor.css' @@ -199,7 +200,7 @@ class Editor extends View @trigger 'buffer-path-change' @buffer.on "path-change.editor#{@id}", => @trigger 'buffer-path-change' - @renderer = new Renderer(@buffer, { maxLineLength: @calcMaxLineLength() }) + @renderer = new Renderer(@buffer, { maxLineLength: @calcMaxLineLength(), tabText: @tabText }) @renderLines() @gutter.renderLineNumbers() @@ -409,7 +410,7 @@ class Editor extends View insertTab: -> if @softTabs - @compositeSelection.insertText(atom.tabText) + @compositeSelection.insertText(@tabText) else @compositeSelection.insertText('\t') diff --git a/src/app/highlighter.coffee b/src/app/highlighter.coffee index 66eb26748..a0e8035b9 100644 --- a/src/app/highlighter.coffee +++ b/src/app/highlighter.coffee @@ -9,7 +9,7 @@ class Highlighter buffer: null screenLines: [] - constructor: (@buffer) -> + constructor: (@buffer, @tabText) -> @id = @constructor.idCounter++ @screenLines = @buildLinesForScreenRows('start', 0, @buffer.getLastRow()) @buffer.on "change.highlighter#{@id}", (e) => @handleBufferChange(e) @@ -59,7 +59,7 @@ class Highlighter tokenObjects = [] for tokenProperties in tokens token = new Token(tokenProperties) - tokenObjects.push(token.breakOutTabCharacters()...) + tokenObjects.push(token.breakOutTabCharacters(@tabText)...) text = _.pluck(tokenObjects, 'value').join('') new ScreenLineFragment(tokenObjects, text, [1, 0], [1, 0], { state }) diff --git a/src/app/renderer.coffee b/src/app/renderer.coffee index f05c0d173..6b7c0cef3 100644 --- a/src/app/renderer.coffee +++ b/src/app/renderer.coffee @@ -20,7 +20,7 @@ class Renderer constructor: (@buffer, options={}) -> @id = @constructor.idCounter++ - @highlighter = new Highlighter(@buffer) + @highlighter = new Highlighter(@buffer, options.tabText ? ' ') @maxLineLength = options.maxLineLength ? Infinity @activeFolds = {} @foldsById = {} diff --git a/src/app/selection.coffee b/src/app/selection.coffee index 0dc42d6c6..fd9f71e60 100644 --- a/src/app/selection.coffee +++ b/src/app/selection.coffee @@ -111,7 +111,7 @@ class Selection extends View row = @cursor.getScreenPosition().row state = @editor.stateForScreenRow(row) if text[0] == "\n" - indent = mode.getNextLineIndent(state, @cursor.getCurrentBufferLine(), atom.tabText) + indent = mode.getNextLineIndent(state, @cursor.getCurrentBufferLine(), @editor.tabText) text = text[0] + indent + text[1..] else if mode.checkOutdent(state, @cursor.getCurrentBufferLine(), text) shouldOutdent = true diff --git a/src/app/token.coffee b/src/app/token.coffee index e52a63cb6..e989ffb0a 100644 --- a/src/app/token.coffee +++ b/src/app/token.coffee @@ -14,12 +14,12 @@ class Token value2 = @value.substring(splitIndex) [new Token(value: value1, type: @type), new Token(value: value2, type: @type)] - breakOutTabCharacters: -> + breakOutTabCharacters: (tabText) -> for substring in @value.match(/([^\t]+|\t)/g) if substring == '\t' - @buildTabToken() + @buildTabToken(tabText) else new Token(value: substring, type: @type) - buildTabToken: -> - new Token(value: atom.tabText, type: @type, isAtomic: true) + buildTabToken: (tabText) -> + new Token(value: tabText, type: @type, isAtomic: true)