aboutsummaryrefslogtreecommitdiff
path: root/atom/packages/relative-line-numbers/lib
diff options
context:
space:
mode:
authorBen Beltran <ben@nsovocal.com>2015-07-10 11:12:25 -0500
committerBen Beltran <ben@nsovocal.com>2015-07-10 11:12:25 -0500
commit24c7594d62d8d7fbbcdb64b11ce4adc5d8e6991a (patch)
treeded312222bb108923da1820ba40b04d710d20e5b /atom/packages/relative-line-numbers/lib
parenteb786e82d170e2abc351a432ade616d6ecdeeb6b (diff)
Adds atom
Diffstat (limited to 'atom/packages/relative-line-numbers/lib')
-rw-r--r--atom/packages/relative-line-numbers/lib/line-number-view.coffee61
-rw-r--r--atom/packages/relative-line-numbers/lib/relative-line-numbers.coffee24
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: () ->