From e5a4a55876e4ee814b5a78a1579fed01990344d5 Mon Sep 17 00:00:00 2001 From: "John \"Elwin\" Edwards" Date: Thu, 21 Jun 2012 09:43:52 -0700 Subject: [PATCH] Try to get some compatibility for keys. I'd thought using the DOM_VK_ names was a good idea. Symbolic names ought to be more portable than opaque numeric constants. Foolish me, expecting things to be sane. Keys now work with FF15 and Chrome 17. --- rlgterm.js | 10 +++--- shterm.js | 11 +++---- termemu-keys.js | 84 ++++++++++++++++++++++++++----------------------- 3 files changed, 54 insertions(+), 51 deletions(-) diff --git a/rlgterm.js b/rlgterm.js index 336be6d..8630672 100644 --- a/rlgterm.js +++ b/rlgterm.js @@ -269,8 +269,8 @@ function sendkey(ev) { return; var keynum = ev.keyCode; var code; - if (keynum >= ev.DOM_VK_A && keynum <= ev.DOM_VK_Z) { - /* Letters. This assumes the codes are 65-90. */ + if (keynum >= 65 && keynum <= 90) { + /* Letters. */ if (ev.ctrlKey) keynum -= 64; else if (!ev.shiftKey) @@ -279,7 +279,7 @@ function sendkey(ev) { if (code.length < 2) code = "0" + code; } - else if (keynum >= ev.DOM_VK_0 && keynum <= ev.DOM_VK_9) { + else if (keynum >= 48 && keynum <= 57) { /* The number row, NOT the numpad. */ if (ev.shiftKey) { code = numShifts[keynum - 48].toString(16); @@ -294,8 +294,8 @@ function sendkey(ev) { else code = keyHexCodes[keynum][0]; } - else if (keynum == ev.DOM_VK_SHIFT || keynum == ev.DOM_VK_CONTROL || - keynum == ev.DOM_VK_ALT || keynum == ev.DOM_VK_CAPS_LOCK) { + else if (keynum >= 16 && keynum <= 20) { + /* Shift, Cntl, Alt, CAPSLOCK */ return; } else { diff --git a/shterm.js b/shterm.js index b6cc779..a5d1927 100644 --- a/shterm.js +++ b/shterm.js @@ -213,8 +213,8 @@ function sendback(str) { function sendkey(ev) { var keynum = ev.keyCode; var code; - if (keynum >= ev.DOM_VK_A && keynum <= ev.DOM_VK_Z) { - /* Letters. This assumes the codes are 65-90. */ + if (keynum >= 65 && keynum <= 90) { + /* Letters. */ if (ev.ctrlKey) keynum -= 64; else if (!ev.shiftKey) @@ -223,7 +223,7 @@ function sendkey(ev) { if (code.length < 2) code = "0" + code; } - else if (keynum >= ev.DOM_VK_0 && keynum <= ev.DOM_VK_9) { + else if (keynum >= 48 && keynum <= 57) { /* The number row. */ if (ev.shiftKey) { code = numShifts[keynum - 48].toString(16); @@ -238,8 +238,7 @@ function sendkey(ev) { else code = keyHexCodes[keynum][0]; } - else if (keynum == ev.DOM_VK_SHIFT || keynum == ev.DOM_VK_CONTROL || - keynum == ev.DOM_VK_ALT || keynum == ev.DOM_VK_CAPS_LOCK) { + else if (keynum >= 16 && keynum <= 20) { return; } else { @@ -298,7 +297,7 @@ function vkey(c) { else return; //writeData("Sending " + keystr); - var formdata = {"t": "d", "n": nsend++, "d": code}; + var formdata = {"t": "d", "n": nsend++, "d": keystr}; var datareq = new XMLHttpRequest(); datareq.onreadystatechange = postResponseHandler; datareq.open('POST', '/feed', true); diff --git a/termemu-keys.js b/termemu-keys.js index 7d97da8..0655bf7 100644 --- a/termemu-keys.js +++ b/termemu-keys.js @@ -5,25 +5,29 @@ var numShifts = [41, 33, 64, 35, 36, 37, 94, 38, 42, 40]; var keyHexCodes = { init: function () { - this[KeyboardEvent.DOM_VK_RETURN] = ["0d", "0d"]; - this[KeyboardEvent.DOM_VK_SPACE] = ["20", "20"]; - this[KeyboardEvent.DOM_VK_TAB] = ["09", "09"]; - this[KeyboardEvent.DOM_VK_BACK_QUOTE] = ["60", "7e"]; - this[KeyboardEvent.DOM_VK_OPEN_BRACKET] = ["5b", "7b"]; - this[KeyboardEvent.DOM_VK_CLOSE_BRACKET] = ["5d", "7d"]; - this[KeyboardEvent.DOM_VK_BACK_SLASH] = ["5c", "7c"]; - this[KeyboardEvent.DOM_VK_SEMICOLON] = ["3b", "3a"]; - this[KeyboardEvent.DOM_VK_QUOTE] = ["27", "22"]; - this[KeyboardEvent.DOM_VK_COMMA] = ["2c", "3c"]; - this[KeyboardEvent.DOM_VK_PERIOD] = ["2e", "3e"]; - this[KeyboardEvent.DOM_VK_SLASH] = ["2f", "3f"]; - this[KeyboardEvent.DOM_VK_EQUALS] = ["3d", "2b"]; - this[KeyboardEvent.DOM_VK_SUBTRACT] = ["2d", "5f"]; - this[KeyboardEvent.DOM_VK_BACK_SPACE] = ["08", "08"]; - this[KeyboardEvent.DOM_VK_DELETE] = ["1b5b337e", "1b5b337e"]; - this[KeyboardEvent.DOM_VK_ESCAPE] = ["1b", "1b"]; - this[KeyboardEvent.DOM_VK_PAGE_UP] = ["1b5b357e", "1b5b357e"]; - this[KeyboardEvent.DOM_VK_PAGE_DOWN] = ["1b5b367e", "1b5b367e"]; + this[13] = ["0d", "0d"]; // return + this[32] = ["20", "20"]; // space + this[9] = ["09", "09"]; // tab + this[192] = ["60", "7e"]; // backtick, tilde + this[219] = ["5b", "7b"]; // open bracket, open brace + this[221] = ["5d", "7d"]; // close bracket, close brace + this[220] = ["5c", "7c"]; // backslash, pipe + this[59] = ["3b", "3a"]; // semicolon, colon + this[186] = ["3b", "3a"]; // semicolon, colon (Chrome) + this[222] = ["27", "22"]; // single quote, double quote + this[188] = ["2c", "3c"]; // comma, less than + this[190] = ["2e", "3e"]; // period, right angle + this[191] = ["2f", "3f"]; // slash, question mark + this[61] = ["3d", "2b"]; // equal, plus + this[187] = ["3d", "2b"]; // equal, plus (Chrome) + this[109] = ["2d", "5f"]; // subtract, underscore (maybe on numpad) + this[173] = ["2d", "5f"]; // subtract, underscore (maybe not on numpad) + this[189] = ["2d", "5f"]; // subtract, underscore (Chrome) + this[8] = ["08", "08"]; // backspace + this[46] = ["1b5b337e", "1b5b337e"]; // delete + this[27] = ["1b", "1b"]; // escape + this[33] = ["1b5b357e", "1b5b357e"]; // page up + this[34] = ["1b5b367e", "1b5b367e"]; // page down this.appCursor(false); this.appKeypad(false); }, @@ -31,20 +35,20 @@ var keyHexCodes = { appCursor: function (on) { /* Aren't special keys vile? */ if (on) { - this[KeyboardEvent.DOM_VK_LEFT] = ["1b4f44", "1b4f44"]; - this[KeyboardEvent.DOM_VK_RIGHT] = ["1b4f43", "1b4f43"]; - this[KeyboardEvent.DOM_VK_UP] = ["1b4f41", "1b4f41"]; - this[KeyboardEvent.DOM_VK_DOWN] = ["1b4f42", "1b4f42"]; - this[KeyboardEvent.DOM_VK_END] = ["1b4f46", "1b4f46"]; - this[KeyboardEvent.DOM_VK_HOME] = ["1b4f48", "1b4f48"]; + this[37] = ["1b4f44", "1b4f44"]; // left arror + this[39] = ["1b4f43", "1b4f43"]; // right arrow + this[38] = ["1b4f41", "1b4f41"]; // up arrow + this[40] = ["1b4f42", "1b4f42"]; // down arrow + this[35] = ["1b4f46", "1b4f46"]; // end + this[36] = ["1b4f48", "1b4f48"]; // home } else { - this[KeyboardEvent.DOM_VK_LEFT] = ["1b5b44", "1b5b44"]; - this[KeyboardEvent.DOM_VK_RIGHT] = ["1b5b43", "1b5b43"]; - this[KeyboardEvent.DOM_VK_UP] = ["1b5b41", "1b5b41"]; - this[KeyboardEvent.DOM_VK_DOWN] = ["1b5b42", "1b5b42"]; - this[KeyboardEvent.DOM_VK_END] = ["1b5b46", "1b5b46"]; - this[KeyboardEvent.DOM_VK_HOME] = ["1b5b48", "1b5b48"]; + this[37] = ["1b5b44", "1b5b44"]; // left arror + this[39] = ["1b5b43", "1b5b43"]; // right arrow + this[38] = ["1b5b41", "1b5b41"]; // up arrow + this[40] = ["1b5b42", "1b5b42"]; // down arrow + this[35] = ["1b5b46", "1b5b46"]; // end + this[36] = ["1b5b48", "1b5b48"]; // home } }, appKeypad: function (on) { @@ -52,15 +56,15 @@ var keyHexCodes = { * sequences. Since we can't count on the terminfo description actually * containing those sequences, pretend they're just arrow keys etc. */ - this[KeyboardEvent.DOM_VK_NUMPAD1] = ["1b4f46", "1b4f46"]; - this[KeyboardEvent.DOM_VK_NUMPAD2] = ["1b4f42", "1b4f42"]; - this[KeyboardEvent.DOM_VK_NUMPAD3] = ["1b5b367e", "1b5b367e"]; - this[KeyboardEvent.DOM_VK_NUMPAD4] = ["1b4f44", "1b4f44"]; - this[KeyboardEvent.DOM_VK_NUMPAD5] = ["1b5b45", "1b5b45"]; - this[KeyboardEvent.DOM_VK_NUMPAD6] = ["1b4f43", "1b4f43"]; - this[KeyboardEvent.DOM_VK_NUMPAD7] = ["1b4f48", "1b4f48"]; - this[KeyboardEvent.DOM_VK_NUMPAD8] = ["1b4f41", "1b4f41"]; - this[KeyboardEvent.DOM_VK_NUMPAD9] = ["1b5b357e", "1b5b357e"]; + this[97] = ["1b4f46", "1b4f46"]; + this[98] = ["1b4f42", "1b4f42"]; + this[99] = ["1b5b367e", "1b5b367e"]; + this[100] = ["1b4f44", "1b4f44"]; + this[101] = ["1b5b45", "1b5b45"]; + this[102] = ["1b4f43", "1b4f43"]; + this[103] = ["1b4f48", "1b4f48"]; + this[104] = ["1b4f41", "1b4f41"]; + this[105] = ["1b5b357e", "1b5b357e"]; return; } };