From d4e9d34d2d49b50472906f545ed777e4dd900bc1 Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Fri, 15 Jul 2016 16:16:37 -0700 Subject: [PATCH] Allow custom keydown handler to be attached Fixes #118 --- src/xterm.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/xterm.js b/src/xterm.js index 8633ff96..f506e8e1 100644 --- a/src/xterm.js +++ b/src/xterm.js @@ -247,6 +247,7 @@ this.queue = ''; this.scrollTop = 0; this.scrollBottom = this.rows - 1; + this.customKeydownHandler = null; // modes this.applicationKeypad = false; @@ -2517,9 +2518,24 @@ this.write(data + '\r\n'); }; + /** + * Attaches a custom keydown handler which is run before keys are processed, giving consumers of + * xterm.js ultimate control as to what keys should be processed by the terminal and what keys + * should not. + * @param {function} customKeydownHandler The custom KeyboardEvent handler to attach. This is a + * function that takes a KeyboardEvent, allowing consumers to stop propogation and/or prevent + * the default action. The function returns whether the event should be processed by xterm.js. + */ + Terminal.prototype.attachCustomKeydownHandler = function(customKeydownHandler) { + this.customKeydownHandler = customKeydownHandler; + } + // Key Resources: // https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent Terminal.prototype.keyDown = function(ev) { + if (this.customKeydownHandler && !this.customKeydownHandler(ev)) { + return; + } var self = this; var result = this.evaluateKeyEscapeSequence(ev);