From eb321a64c1bce8b04df2020c7361e6c72988d191 Mon Sep 17 00:00:00 2001 From: Jess Lin Date: Tue, 3 Feb 2015 08:50:10 -0800 Subject: [PATCH] [Gutter] Create a line-numbers Gutter on each TextEditor --- spec/text-editor-spec.coffee | 16 +++++++++++++--- src/text-editor.coffee | 23 +++++++++++++++++------ 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/spec/text-editor-spec.coffee b/spec/text-editor-spec.coffee index cf7107d4f..890eb923f 100644 --- a/spec/text-editor-spec.coffee +++ b/spec/text-editor-spec.coffee @@ -4244,12 +4244,22 @@ describe "TextEditor", -> waitsForPromise -> editor.checkoutHeadRevision() describe 'gutters', -> + describe 'the TextEditor constructor', -> + it 'creates a line-number gutter', -> + expect(editor.getGutters().length).toBe 1 + lineNumberGutter = editor.gutterWithName('line-number') + expect(lineNumberGutter.name).toBe 'line-number' + expect(lineNumberGutter.priority).toBe 0 + describe '::addGutter', -> it 'can add a gutter', -> - expect(editor.getGutters().length).toBe 0 + expect(editor.getGutters().length).toBe 1 # line-number gutter options = name: 'test-gutter' priority: 1 gutter = editor.addGutter options - expect(editor.getGutters().length).toBe 1 - expect(editor.getGutters()[0]).toBe gutter + expect(editor.getGutters().length).toBe 2 + expect(editor.getGutters()[1]).toBe gutter + + it "does not allow a custom gutter with the 'line-number' name.", -> + expect(editor.addGutter.bind(editor, {name: 'line-number'})).toThrow() diff --git a/src/text-editor.coffee b/src/text-editor.coffee index 200ec9cfa..0498ebe22 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}) -> + constructor: ({@softTabs, initialLine, initialColumn, tabLength, softWrapped, @displayBuffer, buffer, registerEditor, suppressCursorCreation, @mini, @placeholderText, lineNumberGutterVisible}) -> super @emitter = new Emitter @@ -115,6 +115,10 @@ class TextEditor extends Model @emitter.emit 'did-change-scroll-left', scrollLeft @gutterContainer = new GutterContainer + @lineNumberGutter = @gutterContainer.addGutter + name: 'line-number' + priority: 0 + visible: lineNumberGutterVisible atom.workspace?.editorAdded(this) if registerEditor @@ -494,12 +498,15 @@ class TextEditor extends Model @emitter.on 'did-change-mini', callback setLineNumberGutterVisible: (lineNumberGutterVisible) -> - unless lineNumberGutterVisible is @lineNumberGutterVisible - @lineNumberGutterVisible = lineNumberGutterVisible - @emitter.emit 'did-change-line-number-gutter-visible', @lineNumberGutterVisible - @lineNumberGutterVisible + unless lineNumberGutterVisible is @lineNumberGutter.isVisible() + if lineNumberGutterVisible + @lineNumberGutter.show() + else + @lineNumberGutter.hide() + @emitter.emit 'did-change-line-number-gutter-visible', @lineNumberGutter.isVisible() + @lineNumberGutter.isVisible() - isLineNumberGutterVisible: -> @lineNumberGutterVisible ? true + isLineNumberGutterVisible: -> @lineNumberGutter.isVisible() onDidChangeLineNumberGutterVisible: (callback) -> @emitter.on 'did-change-line-number-gutter-visible', callback @@ -513,6 +520,10 @@ class TextEditor extends Model getGutters: -> @gutterContainer.getGutters() + # Public: Returns the {Gutter} with the given name, or null if it doesn't exist. + gutterWithName: (name) -> + @gutterContainer.gutterWithName name + # Set the number of characters that can be displayed horizontally in the # editor. #