diff --git a/src/editor/index.js b/src/editor/index.js index a8635e8b2..619ab4781 100644 --- a/src/editor/index.js +++ b/src/editor/index.js @@ -172,6 +172,12 @@ module.exports = config => { */ Commands: em.get('Commands'), + /** + * @property {Keymaps} + * @private + */ + Keymaps: em.get('Keymaps'), + /** * @property {Modal} * @private diff --git a/src/editor/model/Editor.js b/src/editor/model/Editor.js index 938b6ed1b..d8433cb00 100644 --- a/src/editor/model/Editor.js +++ b/src/editor/model/Editor.js @@ -2,6 +2,7 @@ import { isUndefined, defaults } from 'underscore'; const deps = [ require('utils'), + require('keymaps'), require('storage_manager'), require('device_manager'), require('parser'), diff --git a/src/keymap/index.js b/src/keymaps/index.js similarity index 78% rename from src/keymap/index.js rename to src/keymaps/index.js index b58284d0f..062995641 100644 --- a/src/keymap/index.js +++ b/src/keymaps/index.js @@ -5,9 +5,12 @@ module.exports = () => { let config; const configDef = {}; const keymaps = {}; + console.log('called'); return { + keymaster, + name: 'Keymaps', @@ -48,20 +51,20 @@ module.exports = () => { add(id, keys, handler) { const em = this.em; const cmd = em.get('Commands'); - const keymap = { keys, handler }; + const editor = em.getEditor(); + const keymap = { id, keys, handler }; const pk = keymaps[id]; pk && this.remove(id); keymaps[id] = keymap; - keymaster(keys, id, () => { + keymaster(keys, (e, h) => { + // It's safer putting handlers resolution inside the callback handler = isString(handler) ? cmd.get(handler) : handler; - handler(em.getEditor()); - em.trigger(`keymap:emit`, id, keymap); - em.trigger(`keymap:emit:${id}`, keymap); - console.log('executed', id); + typeof handler == 'object' ? handler.run(editor) : handler(editor); + const args = [id, h.shortcut, e]; + em.trigger('keymap:emit', ...args); + em.trigger(`keymap:emit:${id}`, ...args); }); - em.trigger('keymap:add', id, keymap); - // emit - //keymaster.unbind(keys, id); + em.trigger('keymap:add', keymap); }, @@ -101,8 +104,8 @@ module.exports = () => { if (keymap) { delete keymaps[id]; - keymaster.unbind(keymap.keys, id); - em && em.trigger('keymap:remove', id, keymap); + keymaster.unbind(keymap.keys); + em && em.trigger('keymap:remove', keymap); return keymap; } },