diff options
Diffstat (limited to 'atom/packages/vim-mode/lib/vim-mode.coffee')
| -rw-r--r-- | atom/packages/vim-mode/lib/vim-mode.coffee | 51 |
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) |