(cm, vim, macroModeState, registerName)
| 5403 | }; |
| 5404 | |
| 5405 | function executeMacroRegister(cm, vim, macroModeState, registerName) { |
| 5406 | var register = vimGlobalState.registerController.getRegister(registerName); |
| 5407 | if (registerName == ':') { |
| 5408 | // Read-only register containing last Ex command. |
| 5409 | if (register.keyBuffer[0]) { |
| 5410 | exCommandDispatcher.processCommand(cm, register.keyBuffer[0]); |
| 5411 | } |
| 5412 | macroModeState.isPlaying = false; |
| 5413 | return; |
| 5414 | } |
| 5415 | var keyBuffer = register.keyBuffer; |
| 5416 | var imc = 0; |
| 5417 | macroModeState.isPlaying = true; |
| 5418 | macroModeState.replaySearchQueries = register.searchQueries.slice(0); |
| 5419 | for (var i = 0; i < keyBuffer.length; i++) { |
| 5420 | var text = keyBuffer[i]; |
| 5421 | var match, key; |
| 5422 | while (text) { |
| 5423 | // Pull off one command key, which is either a single character |
| 5424 | // or a special sequence wrapped in '<' and '>', e.g. '<Space>'. |
| 5425 | match = (/<\w+-.+?>|<\w+>|./).exec(text); |
| 5426 | key = match[0]; |
| 5427 | text = text.substring(match.index + key.length); |
| 5428 | CodeMirror.Vim.handleKey(cm, key, 'macro'); |
| 5429 | if (vim.insertMode) { |
| 5430 | var changes = register.insertModeChanges[imc++].changes; |
| 5431 | vimGlobalState.macroModeState.lastInsertModeChanges.changes = |
| 5432 | changes; |
| 5433 | repeatInsertModeChanges(cm, changes, 1); |
| 5434 | exitInsertMode(cm); |
| 5435 | } |
| 5436 | } |
| 5437 | } |
| 5438 | macroModeState.isPlaying = false; |
| 5439 | } |
| 5440 | |
| 5441 | function logKey(macroModeState, key) { |
| 5442 | if (macroModeState.isPlaying) { return; } |
no test coverage detected