()
| 9572 | var Pos = CodeMirror.Pos; |
| 9573 | |
| 9574 | var Vim = function() { |
| 9575 | function enterVimMode(cm) { |
| 9576 | cm.setOption('disableInput', true); |
| 9577 | cm.setOption('showCursorWhenSelecting', false); |
| 9578 | CodeMirror.signal(cm, "vim-mode-change", {mode: "normal"}); |
| 9579 | cm.on('cursorActivity', onCursorActivity); |
| 9580 | maybeInitVimState(cm); |
| 9581 | CodeMirror.on(cm.getInputField(), 'paste', getOnPasteFn(cm)); |
| 9582 | } |
| 9583 | |
| 9584 | function leaveVimMode(cm) { |
| 9585 | cm.setOption('disableInput', false); |
| 9586 | cm.off('cursorActivity', onCursorActivity); |
| 9587 | CodeMirror.off(cm.getInputField(), 'paste', getOnPasteFn(cm)); |
| 9588 | cm.state.vim = null; |
| 9589 | } |
| 9590 | |
| 9591 | function detachVimMap(cm, next) { |
| 9592 | if (this == CodeMirror.keyMap.vim) |
| 9593 | CodeMirror.rmClass(cm.getWrapperElement(), "cm-fat-cursor"); |
| 9594 | |
| 9595 | if (!next || next.attach != attachVimMap) |
| 9596 | leaveVimMode(cm, false); |
| 9597 | } |
| 9598 | function attachVimMap(cm, prev) { |
| 9599 | if (this == CodeMirror.keyMap.vim) |
| 9600 | CodeMirror.addClass(cm.getWrapperElement(), "cm-fat-cursor"); |
| 9601 | |
| 9602 | if (!prev || prev.attach != attachVimMap) |
| 9603 | enterVimMode(cm); |
| 9604 | } |
| 9605 | |
| 9606 | // Deprecated, simply setting the keymap works again. |
| 9607 | CodeMirror.defineOption('vimMode', false, function(cm, val, prev) { |
| 9608 | if (val && cm.getOption("keyMap") != "vim") |
| 9609 | cm.setOption("keyMap", "vim"); |
| 9610 | else if (!val && prev != CodeMirror.Init && /^vim/.test(cm.getOption("keyMap"))) |
| 9611 | cm.setOption("keyMap", "default"); |
| 9612 | }); |
| 9613 | |
| 9614 | function cmKey(key, cm) { |
| 9615 | if (!cm) { return undefined; } |
| 9616 | if (this[key]) { return this[key]; } |
| 9617 | var vimKey = cmKeyToVimKey(key); |
| 9618 | if (!vimKey) { |
| 9619 | return false; |
| 9620 | } |
| 9621 | var cmd = CodeMirror.Vim.findKey(cm, vimKey); |
| 9622 | if (typeof cmd == 'function') { |
| 9623 | CodeMirror.signal(cm, 'vim-keypress', vimKey); |
| 9624 | } |
| 9625 | return cmd; |
| 9626 | } |
| 9627 | |
| 9628 | var modifiers = {'Shift': 'S', 'Ctrl': 'C', 'Alt': 'A', 'Cmd': 'D', 'Mod': 'A'}; |
| 9629 | var specialKeys = {Enter:'CR',Backspace:'BS',Delete:'Del',Insert:'Ins'}; |
| 9630 | function cmKeyToVimKey(key) { |
| 9631 | if (key.charAt(0) == '\'') { |
no test coverage detected