From 59f5e7ffca7d37b6b808772a9a7d438ac1d6f003 Mon Sep 17 00:00:00 2001 From: nightwing Date: Thu, 29 Nov 2012 23:19:16 +0400 Subject: [PATCH] [vim] pass unhandled keys to the browser --- lib/ace/keyboard/keybinding.js | 34 +++++++++++++++----------------- lib/ace/keyboard/vim.js | 4 +++- lib/ace/keyboard/vim/commands.js | 5 ++++- 3 files changed, 23 insertions(+), 20 deletions(-) diff --git a/lib/ace/keyboard/keybinding.js b/lib/ace/keyboard/keybinding.js index f92d1f6f..3078c2d0 100644 --- a/lib/ace/keyboard/keybinding.js +++ b/lib/ace/keyboard/keybinding.js @@ -90,30 +90,28 @@ var KeyBinding = function(editor) { this.$callKeyboardHandlers = function (hashId, keyString, keyCode, e) { var toExecute; + var success = false; + var commands = this.$editor.commands; + for (var i = this.$handlers.length; i--;) { toExecute = this.$handlers[i].handleKeyboard( this.$data, hashId, keyString, keyCode, e ); - if (toExecute && toExecute.command) + if (!toExecute || !toExecute.command) + continue; + + // allow keyboardHandler to consume keys + if (toExecute.command == "null") { + success = toExecute.passEvent != true; + } else { + success = commands.exec(toExecute.command, this.$editor, toExecute.args, e); + } + // do not stop input events to not break repeating + if (success && e && hashId != -1) + event.stopEvent(e); + if (success) break; } - - if (!toExecute || !toExecute.command) - return false; - - var success = false; - var commands = this.$editor.commands; - - // allow keyboardHandler to consume keys - if (toExecute.command != "null") - success = commands.exec(toExecute.command, this.$editor, toExecute.args, e); - else - success = toExecute.passEvent != true; - - // do not stop input events to not break repeating - if (success && e && hashId != -1) - event.stopEvent(e); - return success; }; diff --git a/lib/ace/keyboard/vim.js b/lib/ace/keyboard/vim.js index 5313e44c..a4f1c39d 100644 --- a/lib/ace/keyboard/vim.js +++ b/lib/ace/keyboard/vim.js @@ -101,7 +101,9 @@ exports.handler = { return startCommands[key]; return { command: { - exec: function(editor) {cmds.inputBuffer.push(editor, key);} + exec: function(editor) { + return cmds.inputBuffer.push(editor, key); + } } }; } // if no modifier || shift: wait for input. diff --git a/lib/ace/keyboard/vim/commands.js b/lib/ace/keyboard/vim/commands.js index a9b24aa3..7cb15c2c 100644 --- a/lib/ace/keyboard/vim/commands.js +++ b/lib/ace/keyboard/vim/commands.js @@ -305,6 +305,7 @@ var inputBuffer = exports.inputBuffer = { lastInsertCommands: [], push: function(editor, ch, keyId) { + var isKeyHandled = true; this.idle = false; var wObj = this.waitingForParam; if (wObj) { @@ -369,6 +370,7 @@ var inputBuffer = exports.inputBuffer = { this.exec(editor, { operator: this.operator }, ch); } else { + isKeyHandled = ch.length == 1; this.reset(); } @@ -379,9 +381,10 @@ var inputBuffer = exports.inputBuffer = { } else if (this.status) { this.status = ""; } else { - return; + return isKeyHandled; } editor._emit("changeStatus"); + return isKeyHandled; }, waitForParam: function(cmd) {