aboutsummaryrefslogtreecommitdiff
path: root/atom/packages/vim-mode/lib/vim-mode.coffee
diff options
context:
space:
mode:
Diffstat (limited to 'atom/packages/vim-mode/lib/vim-mode.coffee')
-rw-r--r--atom/packages/vim-mode/lib/vim-mode.coffee51
1 files changed, 51 insertions, 0 deletions
diff --git a/atom/packages/vim-mode/lib/vim-mode.coffee b/atom/packages/vim-mode/lib/vim-mode.coffee
new file mode 100644
index 0000000..660fba0
--- /dev/null
+++ b/atom/packages/vim-mode/lib/vim-mode.coffee
@@ -0,0 +1,51 @@
+{Disposable, CompositeDisposable} = require 'event-kit'
+StatusBarManager = require './status-bar-manager'
+GlobalVimState = require './global-vim-state'
+VimState = require './vim-state'
+settings = require './settings'
+
+module.exports =
+ config: settings.config
+
+ activate: (state) ->
+ @disposables = new CompositeDisposable
+ @globalVimState = new GlobalVimState
+ @statusBarManager = new StatusBarManager
+
+ @vimStates = new Set
+ @vimStatesByEditor = new WeakMap
+
+ @disposables.add atom.workspace.observeTextEditors (editor) =>
+ return if editor.isMini() or @vimStatesByEditor.get(editor)
+
+ vimState = new VimState(
+ atom.views.getView(editor),
+ @statusBarManager,
+ @globalVimState
+ )
+
+ @vimStates.add(vimState)
+ @vimStatesByEditor.set(editor, vimState)
+ vimState.onDidDestroy => @vimStates.delete(vimState)
+
+ @disposables.add new Disposable =>
+ @vimStates.forEach (vimState) -> vimState.destroy()
+
+ deactivate: ->
+ @disposables.dispose()
+
+ getGlobalState: ->
+ @globalVimState
+
+ getEditorState: (editor) ->
+ @vimStatesByEditor.get(editor)
+
+ consumeStatusBar: (statusBar) ->
+ @statusBarManager.initialize(statusBar)
+ @statusBarManager.attach()
+ @disposables.add new Disposable =>
+ @statusBarManager.detach()
+
+ provideVimMode: ->
+ getGlobalState: @getGlobalState.bind(this)
+ getEditorState: @getEditorState.bind(this)