extensibility via services

This commit is contained in:
Loic Nageleisen 2015-02-23 14:59:33 +01:00
parent d2bf0c5502
commit 4f2e9d6fd7
5 changed files with 30 additions and 2 deletions

View file

@ -8,7 +8,17 @@ Install both [vim-mode](https://github.com/atom/vim-mode) and ex-mode. Type `:`
## Extend
See `lib/ex.coffee` to add more commands. Contributions are very welcome!
Use the service to register commands, from your own package, or straight from `init.coffee`:
```coffee
# in Atom's init.coffee
atom.packages.onDidActivatePackage (pack) ->
if pack.name == 'ex-mode'
Ex = pack.mainModule.provideEx()
Ex.registerCommand 'z', -> console.log("Zzzzzz...")
```
See `lib/ex.coffee` for some examples commands. Contributions are very welcome!
## Status

View file

@ -13,7 +13,7 @@ class Command
return unless input.characters.length > 0
[command, args...] = input.characters.split(" ")
func = (new Ex)[command]
func = Ex.singleton()[command]
if func?
func(args...)
else

View file

@ -1,5 +1,6 @@
GlobalExState = require './global-ex-state'
ExState = require './ex-state'
Ex = require './ex'
{Disposable, CompositeDisposable} = require 'event-kit'
module.exports = ExMode =
@ -26,3 +27,6 @@ module.exports = ExMode =
deactivate: ->
@disposables.dispose()
provideEx: ->
registerCommand: Ex.registerCommand.bind(Ex)

View file

@ -1,6 +1,12 @@
path = require 'path'
class Ex
@singleton: =>
@ex ||= new Ex
@registerCommand: (name, func) =>
@singleton()[name] = func
quit: ->
atom.workspace.getActivePane().destroyActiveItem()

View file

@ -14,5 +14,13 @@
"dependencies": {
"underscore-plus": "1.x",
"event-kit": "^0.7.2"
},
"providedServices": {
"ex-mode": {
"description": "Ex commands",
"versions": {
"0.20.0": "provideEx"
}
}
}
}