From 7367b4db1ebb7a9b65d820b9c0ee953767ee8b8b Mon Sep 17 00:00:00 2001 From: Yunchi Luo <mightyguava@gmail.com> Date: Sun, 7 Jun 2015 12:44:40 -0400 Subject: [PATCH] [vim] Expose defineRegister API --- keymap/vim.js | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/keymap/vim.js b/keymap/vim.js index 53003f6e..d50cc4af 100644 --- a/keymap/vim.js +++ b/keymap/vim.js @@ -851,6 +851,8 @@ mapCommand: mapCommand, _mapCommand: _mapCommand, + defineRegister: defineRegister, + exitVisualMode: exitVisualMode, exitInsertMode: exitInsertMode }; @@ -940,6 +942,25 @@ } }; + /** + * Defines an external register. + * + * The name should be a single character that will be used to reference the register. + * The register should support setText, pushText, clear, and toString(). See Register + * for a reference implementation. + */ + function defineRegister(name, register) { + var registers = vimGlobalState.registerController.registers[name]; + if (!name || name.length != 1) { + throw Error('Register name must be 1 character'); + } + if (registers[name]) { + throw Error('Register already defined ' + name); + } + registers[name] = register; + validRegisters.push(name); + } + /* * vim registers allow you to keep many independent copy and paste buffers. * See http://usevim.com/2012/04/13/registers/ for an introduction. @@ -4815,7 +4836,7 @@ if (macroModeState.isPlaying) { return; } var registerName = macroModeState.latestRegister; var register = vimGlobalState.registerController.getRegister(registerName); - if (register) { + if (register && register.pushInsertModeChanges) { register.pushInsertModeChanges(macroModeState.lastInsertModeChanges); } } @@ -4824,7 +4845,7 @@ if (macroModeState.isPlaying) { return; } var registerName = macroModeState.latestRegister; var register = vimGlobalState.registerController.getRegister(registerName); - if (register) { + if (register && register.pushSearchQuery) { register.pushSearchQuery(query); } } -- GitLab