diff options
| author | Ben Beltran <ben@nsovocal.com> | 2015-07-10 11:12:25 -0500 |
|---|---|---|
| committer | Ben Beltran <ben@nsovocal.com> | 2015-07-10 11:12:25 -0500 |
| commit | 24c7594d62d8d7fbbcdb64b11ce4adc5d8e6991a (patch) | |
| tree | ded312222bb108923da1820ba40b04d710d20e5b /atom/packages/relative-line-numbers/lib | |
| parent | eb786e82d170e2abc351a432ade616d6ecdeeb6b (diff) | |
Adds atom
Diffstat (limited to 'atom/packages/relative-line-numbers/lib')
| -rw-r--r-- | atom/packages/relative-line-numbers/lib/line-number-view.coffee | 61 | ||||
| -rw-r--r-- | atom/packages/relative-line-numbers/lib/relative-line-numbers.coffee | 24 |
2 files changed, 85 insertions, 0 deletions
diff --git a/atom/packages/relative-line-numbers/lib/line-number-view.coffee b/atom/packages/relative-line-numbers/lib/line-number-view.coffee new file mode 100644 index 0000000..6346a3c --- /dev/null +++ b/atom/packages/relative-line-numbers/lib/line-number-view.coffee @@ -0,0 +1,61 @@ +{CompositeDisposable} = require 'atom' + +module.exports = +class LineNumberView + constructor: (@editor) -> + @subscriptions = new CompositeDisposable() + @editorView = atom.views.getView(@editor) + @trueNumberCurrentLine = atom.config.get('relative-line-numbers.trueNumberCurrentLine') + @showNormalLineNumbers = atom.config.get('relative-line-numbers.showNormalLineNumbers') + + # Subscribe for when the line numbers should be updated. + @subscriptions.add(@editor.onDidChangeCursorPosition(@_update)) + @subscriptions.add(@editor.onDidStopChanging(@_update)) + + # Subscribe to when the true number on current line config is modified. + @subscriptions.add atom.config.onDidChange 'relative-line-numbers.trueNumberCurrentLine', => + @trueNumberCurrentLine = atom.config.get('relative-line-numbers.trueNumberCurrentLine') + @_update() + + # Subscribe to when the show normal line numbers config is modified. + @subscriptions.add atom.config.onDidChange 'relative-line-numbers.showNormalLineNumbers', => + @showNormalLineNumbers = atom.config.get('relative-line-numbers.showNormalLineNumbers') + @_update() + + # Dispose the subscriptions when the editor is destroyed. + @subscriptions.add @editor.onDidDestroy => + @subscriptions.dispose() + + @_update() + + _spacer: (totalLines, currentIndex) -> + Array(totalLines.toString().length - currentIndex.toString().length + 1).join ' ' + + # Update the line numbers on the editor + _update: () => + totalLines = @editor.getLineCount() + currentLineNumber = @editor.getCursorScreenPosition().row + 1 + lineNumberElements = @editorView.rootElement?.querySelectorAll('.line-number') + + index = @_index(totalLines, currentLineNumber) + + for lineNumberElement in lineNumberElements + row = lineNumberElement.getAttribute('data-buffer-row') + relative = index[row] or = 0 + normalLineNumbers = '' + if @showNormalLineNumbers + humanRow = parseInt(row) + 1 + normalLineNumbers = humanRow + @_spacer(totalLines, humanRow) + " " + lineNumberElement.innerHTML = "#{normalLineNumbers}#{relative}<div class=\"icon-right\"></div>" + + # Return a lookup array with the relative line numbers + _index: (totalLines, currentLineNumber) -> + for line in [0...totalLines] + lineNumber = (Math.abs(currentLineNumber - (line + 1))) + if @trueNumberCurrentLine and lineNumber == 0 + if @showNormalLineNumbers + '•' + else + currentLineNumber + else + lineNumber diff --git a/atom/packages/relative-line-numbers/lib/relative-line-numbers.coffee b/atom/packages/relative-line-numbers/lib/relative-line-numbers.coffee new file mode 100644 index 0000000..34fd190 --- /dev/null +++ b/atom/packages/relative-line-numbers/lib/relative-line-numbers.coffee @@ -0,0 +1,24 @@ +LineNumberView = require './line-number-view' + +module.exports = + # Config schema + config: + trueNumberCurrentLine: + type: 'boolean' + default: true + description: 'Show the true number on the current line' + showNormalLineNumbers: + type: 'boolean' + default: true + description: 'Show normal line numbers' + + configDefaults: + trueNumberCurrentLine: true + showNormalLineNumbers: true + + activate: (state) -> + console.log('Activiating relative line numbers.'); + atom.workspace.observeTextEditors (editor) -> + new LineNumberView(editor) + + deactive: () -> |