(cm, vim, macroModeState, registerName)
| 14135 | }; |
| 14136 | |
| 14137 | function executeMacroRegister(cm, vim, macroModeState, registerName) { |
| 14138 | var register = vimGlobalState.registerController.getRegister(registerName); |
| 14139 | if (registerName == ':') { |
| 14140 | // Read-only register containing last Ex command. |
| 14141 | if (register.keyBuffer[0]) { |
| 14142 | exCommandDispatcher.processCommand(cm, register.keyBuffer[0]); |
| 14143 | } |
| 14144 | macroModeState.isPlaying = false; |
| 14145 | return; |
| 14146 | } |
| 14147 | var keyBuffer = register.keyBuffer; |
| 14148 | var imc = 0; |
| 14149 | macroModeState.isPlaying = true; |
| 14150 | macroModeState.replaySearchQueries = register.searchQueries.slice(0); |
| 14151 | for (var i = 0; i < keyBuffer.length; i++) { |
| 14152 | var text = keyBuffer[i]; |
| 14153 | var match, key; |
| 14154 | while (text) { |
| 14155 | // Pull off one command key, which is either a single character |
| 14156 | // or a special sequence wrapped in '<' and '>', e.g. '<Space>'. |
| 14157 | match = (/<\w+-.+?>|<\w+>|./).exec(text); |
| 14158 | key = match[0]; |
| 14159 | text = text.substring(match.index + key.length); |
| 14160 | CodeMirror.Vim.handleKey(cm, key, 'macro'); |
| 14161 | if (vim.insertMode) { |
| 14162 | var changes = register.insertModeChanges[imc++].changes; |
| 14163 | vimGlobalState.macroModeState.lastInsertModeChanges.changes = |
| 14164 | changes; |
| 14165 | repeatInsertModeChanges(cm, changes, 1); |
| 14166 | exitInsertMode(cm); |
| 14167 | } |
| 14168 | } |
| 14169 | }; |
| 14170 | macroModeState.isPlaying = false; |
| 14171 | } |
| 14172 | |
| 14173 | function logKey(macroModeState, key) { |
| 14174 | if (macroModeState.isPlaying) { return; } |
no test coverage detected