]> git.r.bdr.sh - rbdr/dotfiles/blob - atom/packages/vim-mode/lib/vim-mode.coffee
Update atoms
[rbdr/dotfiles] / atom / packages / vim-mode / lib / vim-mode.coffee
1 {Disposable, CompositeDisposable} = require 'event-kit'
2 StatusBarManager = require './status-bar-manager'
3 GlobalVimState = require './global-vim-state'
4 VimState = require './vim-state'
5 settings = require './settings'
6
7 module.exports =
8 config: settings.config
9
10 activate: (state) ->
11 @disposables = new CompositeDisposable
12 @globalVimState = new GlobalVimState
13 @statusBarManager = new StatusBarManager
14
15 @vimStates = new Set
16 @vimStatesByEditor = new WeakMap
17
18 @disposables.add atom.workspace.observeTextEditors (editor) =>
19 return if editor.isMini() or @getEditorState(editor)
20
21 vimState = new VimState(
22 atom.views.getView(editor),
23 @statusBarManager,
24 @globalVimState
25 )
26
27 @vimStates.add(vimState)
28 @vimStatesByEditor.set(editor, vimState)
29 vimState.onDidDestroy => @vimStates.delete(vimState)
30
31 @disposables.add atom.workspace.onDidChangeActivePaneItem @updateToPaneItem.bind(this)
32
33 @disposables.add new Disposable =>
34 @vimStates.forEach (vimState) -> vimState.destroy()
35
36 deactivate: ->
37 @disposables.dispose()
38
39 getGlobalState: ->
40 @globalVimState
41
42 getEditorState: (editor) ->
43 @vimStatesByEditor.get(editor)
44
45 consumeStatusBar: (statusBar) ->
46 @statusBarManager.initialize(statusBar)
47 @statusBarManager.attach()
48 @disposables.add new Disposable =>
49 @statusBarManager.detach()
50
51 updateToPaneItem: (item) ->
52 vimState = @getEditorState(item) if item?
53 if vimState?
54 vimState.updateStatusBar()
55 else
56 @statusBarManager.hide()
57
58 provideVimMode: ->
59 getGlobalState: @getGlobalState.bind(this)
60 getEditorState: @getEditorState.bind(this)