From dec86385beca96993e4a9b40d82ccbf47655285b Mon Sep 17 00:00:00 2001 From: Chris Granger <ibdknox@gmail.com> Date: Mon, 29 Jul 2013 09:41:56 -0700 Subject: [PATCH] Vim: raise mode change events Signed-off-by: Chris Granger <ibdknox@gmail.com> --- keymap/vim.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/keymap/vim.js b/keymap/vim.js index 9c9454d6..9ad17af3 100644 --- a/keymap/vim.js +++ b/keymap/vim.js @@ -40,6 +40,10 @@ * TODO: Implement the remaining special marks. They have more complex * behavior. * + * Events: + * 'vim-mode-change' - raised on the editor anytime the current mode changes, + * Event object: {mode: "visual", subMode: "linewise"} + * * Code structure: * 1. Default keymap * 2. Variable declarations and short basic helpers @@ -318,6 +322,7 @@ CodeMirror.defineOption('vimMode', false, function(cm, val) { if (val) { cm.setOption('keyMap', 'vim'); + CodeMirror.signal(cm, "vim-mode-change", {mode: "normal"}); cm.on('beforeSelectionChange', beforeSelectionChange); maybeInitVimState(cm); } else if (cm.state.vim) { @@ -579,6 +584,7 @@ !cursorEqual(cm.getCursor('head'), cm.getCursor('anchor'))) { vim.visualMode = true; vim.visualLine = false; + CodeMirror.signal(cm, "vim-mode-change", {mode: "visual"}); cm.on('mousedown', exitVisualMode); } if (key != '0' || (key == '0' && vim.inputState.getRepeat() === 0)) { @@ -1651,8 +1657,10 @@ // Handle Replace-mode as a special case of insert mode. cm.toggleOverwrite(true); cm.setOption('keyMap', 'vim-replace'); + CodeMirror.signal(cm, "vim-mode-change", {mode: "replace"}); } else { cm.setOption('keyMap', 'vim-insert'); + CodeMirror.signal(cm, "vim-mode-change", {mode: "insert"}); } if (!vimGlobalState.macroModeState.inReplay) { // Only record if not replaying. @@ -1694,6 +1702,7 @@ } else { cm.setSelection(curStart, curEnd); } + CodeMirror.signal(cm, "vim-mode-change", {mode: "visual", subMode: vim.visualLine ? "linewise" : ""}); } else { curStart = cm.getCursor('anchor'); curEnd = cm.getCursor('head'); @@ -1706,10 +1715,12 @@ curEnd.ch = cursorIsBefore(curStart, curEnd) ? lineLength(cm, curEnd.line) : 0; cm.setSelection(curStart, curEnd); + CodeMirror.signal(cm, "vim-mode-change", {mode: "visual", subMode: "linewise"}); } else if (vim.visualLine && !actionArgs.linewise) { // v pressed in linewise visual mode. Switch to characterwise visual // mode instead of exiting visual mode. vim.visualLine = false; + CodeMirror.signal(cm, "vim-mode-change", {mode: "visual"}); } else { exitVisualMode(cm); } @@ -2022,6 +2033,7 @@ // it's not supposed to be. cm.setCursor(clipCursorToContent(cm, selectionEnd)); } + CodeMirror.signal(cm, "vim-mode-change", {mode: "normal"}); } // Remove any trailing newlines from the selection. For @@ -3444,6 +3456,7 @@ vim.insertMode = false; cm.setOption('keyMap', 'vim'); cm.toggleOverwrite(false); // exit replace mode if we were in it. + CodeMirror.signal(cm, "vim-mode-change", {mode: "normal"}); } CodeMirror.keyMap['vim-insert'] = { -- GitLab