From 62ce64f97d5a77b1304abf4ab30bf67b78678fcf Mon Sep 17 00:00:00 2001 From: ayapi Date: Sat, 27 Aug 2016 01:03:35 +0900 Subject: [PATCH 1/2] add modifier+delete keys --- src/xterm.js | 8 +++++++- test/test.js | 9 +++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/xterm.js b/src/xterm.js index bb74a3e2..ddf19da1 100644 --- a/src/xterm.js +++ b/src/xterm.js @@ -2974,7 +2974,13 @@ } break; // delete - case 46: result.key = '\x1b[3~'; break; + case 46: + if (modifiers) { + result.key = '\x1b[3;' + (modifiers + 1) + '~'; + } else { + result.key = '\x1b[3~'; + } + break; // home case 36: if (modifiers) diff --git a/test/test.js b/test/test.js index 7b67f234..bb2797e3 100644 --- a/test/test.js +++ b/test/test.js @@ -49,6 +49,15 @@ describe('xterm.js', function() { assert.equal(xterm.evaluateKeyEscapeSequence({ keyCode: 122 }).key, '\x1b[23~'); // CSI 2 3 ~ assert.equal(xterm.evaluateKeyEscapeSequence({ keyCode: 123 }).key, '\x1b[24~'); // CSI 2 4 ~ }); + it('should return \\x1b[3;5~ for ctrl+delete', function() { + assert.equal(xterm.evaluateKeyEscapeSequence({ ctrlKey: true, keyCode: 46 }).key, '\x1b[3;5~'); + }); + it('should return \\x1b[3;2~ for shift+delete', function() { + assert.equal(xterm.evaluateKeyEscapeSequence({ shiftKey: true, keyCode: 46 }).key, '\x1b[3;2~'); + }); + it('should return \\x1b[3;3~ for alt+delete', function() { + assert.equal(xterm.evaluateKeyEscapeSequence({ altKey: true, keyCode: 46 }).key, '\x1b[3;3~'); + }); it('should return \\x1b[5D for ctrl+left', function() { assert.equal(xterm.evaluateKeyEscapeSequence({ ctrlKey: true, keyCode: 37 }).key, '\x1b[1;5D'); // CSI 5 D }); From 7f7156bafa22d39e5452e21bd8d2637ed3b35584 Mon Sep 17 00:00:00 2001 From: ayapi Date: Sat, 27 Aug 2016 01:13:01 +0900 Subject: [PATCH 2/2] add modifier+F1-F12 keys --- src/xterm.js | 96 +++++++++++++++++++++++++++++++++++++++++++++------- test/test.js | 39 +++++++++++++++++++++ 2 files changed, 123 insertions(+), 12 deletions(-) diff --git a/src/xterm.js b/src/xterm.js index ddf19da1..bcf44d01 100644 --- a/src/xterm.js +++ b/src/xterm.js @@ -3016,18 +3016,90 @@ } break; // F1-F12 - case 112: result.key = '\x1bOP'; break; - case 113: result.key = '\x1bOQ'; break; - case 114: result.key = '\x1bOR'; break; - case 115: result.key = '\x1bOS'; break; - case 116: result.key = '\x1b[15~'; break; - case 117: result.key = '\x1b[17~'; break; - case 118: result.key = '\x1b[18~'; break; - case 119: result.key = '\x1b[19~'; break; - case 120: result.key = '\x1b[20~'; break; - case 121: result.key = '\x1b[21~'; break; - case 122: result.key = '\x1b[23~'; break; - case 123: result.key = '\x1b[24~'; break; + case 112: + if (modifiers) { + result.key = '\x1b[1;' + (modifiers + 1) + 'P'; + } else { + result.key = '\x1bOP'; + } + break; + case 113: + if (modifiers) { + result.key = '\x1b[1;' + (modifiers + 1) + 'Q'; + } else { + result.key = '\x1bOQ'; + } + break; + case 114: + if (modifiers) { + result.key = '\x1b[1;' + (modifiers + 1) + 'R'; + } else { + result.key = '\x1bOR'; + } + break; + case 115: + if (modifiers) { + result.key = '\x1b[1;' + (modifiers + 1) + 'S'; + } else { + result.key = '\x1bOS'; + } + break; + case 116: + if (modifiers) { + result.key = '\x1b[15;' + (modifiers + 1) + '~'; + } else { + result.key = '\x1b[15~'; + } + break; + case 117: + if (modifiers) { + result.key = '\x1b[17;' + (modifiers + 1) + '~'; + } else { + result.key = '\x1b[17~'; + } + break; + case 118: + if (modifiers) { + result.key = '\x1b[18;' + (modifiers + 1) + '~'; + } else { + result.key = '\x1b[18~'; + } + break; + case 119: + if (modifiers) { + result.key = '\x1b[19;' + (modifiers + 1) + '~'; + } else { + result.key = '\x1b[19~'; + } + break; + case 120: + if (modifiers) { + result.key = '\x1b[20;' + (modifiers + 1) + '~'; + } else { + result.key = '\x1b[20~'; + } + break; + case 121: + if (modifiers) { + result.key = '\x1b[21;' + (modifiers + 1) + '~'; + } else { + result.key = '\x1b[21~'; + } + break; + case 122: + if (modifiers) { + result.key = '\x1b[23;' + (modifiers + 1) + '~'; + } else { + result.key = '\x1b[23~'; + } + break; + case 123: + if (modifiers) { + result.key = '\x1b[24;' + (modifiers + 1) + '~'; + } else { + result.key = '\x1b[24~'; + } + break; default: // a-z and space if (ev.ctrlKey && !ev.shiftKey && !ev.altKey && !ev.metaKey) { diff --git a/test/test.js b/test/test.js index bb2797e3..91e6ddc4 100644 --- a/test/test.js +++ b/test/test.js @@ -84,6 +84,45 @@ describe('xterm.js', function() { it('should return \\x1b[5B for alt+down', function() { assert.equal(xterm.evaluateKeyEscapeSequence({ altKey: true, keyCode: 40 }).key, '\x1b[1;5B'); // CSI 5 B }); + it('should return the correct escape sequence for modified F1-F12 keys', function() { + assert.equal(xterm.evaluateKeyEscapeSequence({ shiftKey: true, keyCode: 112 }).key, '\x1b[1;2P'); + assert.equal(xterm.evaluateKeyEscapeSequence({ shiftKey: true, keyCode: 113 }).key, '\x1b[1;2Q'); + assert.equal(xterm.evaluateKeyEscapeSequence({ shiftKey: true, keyCode: 114 }).key, '\x1b[1;2R'); + assert.equal(xterm.evaluateKeyEscapeSequence({ shiftKey: true, keyCode: 115 }).key, '\x1b[1;2S'); + assert.equal(xterm.evaluateKeyEscapeSequence({ shiftKey: true, keyCode: 116 }).key, '\x1b[15;2~'); + assert.equal(xterm.evaluateKeyEscapeSequence({ shiftKey: true, keyCode: 117 }).key, '\x1b[17;2~'); + assert.equal(xterm.evaluateKeyEscapeSequence({ shiftKey: true, keyCode: 118 }).key, '\x1b[18;2~'); + assert.equal(xterm.evaluateKeyEscapeSequence({ shiftKey: true, keyCode: 119 }).key, '\x1b[19;2~'); + assert.equal(xterm.evaluateKeyEscapeSequence({ shiftKey: true, keyCode: 120 }).key, '\x1b[20;2~'); + assert.equal(xterm.evaluateKeyEscapeSequence({ shiftKey: true, keyCode: 121 }).key, '\x1b[21;2~'); + assert.equal(xterm.evaluateKeyEscapeSequence({ shiftKey: true, keyCode: 122 }).key, '\x1b[23;2~'); + assert.equal(xterm.evaluateKeyEscapeSequence({ shiftKey: true, keyCode: 123 }).key, '\x1b[24;2~'); + assert.equal(xterm.evaluateKeyEscapeSequence({ altKey: true, keyCode: 112 }).key, '\x1b[1;3P'); + assert.equal(xterm.evaluateKeyEscapeSequence({ altKey: true, keyCode: 113 }).key, '\x1b[1;3Q'); + assert.equal(xterm.evaluateKeyEscapeSequence({ altKey: true, keyCode: 114 }).key, '\x1b[1;3R'); + assert.equal(xterm.evaluateKeyEscapeSequence({ altKey: true, keyCode: 115 }).key, '\x1b[1;3S'); + assert.equal(xterm.evaluateKeyEscapeSequence({ altKey: true, keyCode: 116 }).key, '\x1b[15;3~'); + assert.equal(xterm.evaluateKeyEscapeSequence({ altKey: true, keyCode: 117 }).key, '\x1b[17;3~'); + assert.equal(xterm.evaluateKeyEscapeSequence({ altKey: true, keyCode: 118 }).key, '\x1b[18;3~'); + assert.equal(xterm.evaluateKeyEscapeSequence({ altKey: true, keyCode: 119 }).key, '\x1b[19;3~'); + assert.equal(xterm.evaluateKeyEscapeSequence({ altKey: true, keyCode: 120 }).key, '\x1b[20;3~'); + assert.equal(xterm.evaluateKeyEscapeSequence({ altKey: true, keyCode: 121 }).key, '\x1b[21;3~'); + assert.equal(xterm.evaluateKeyEscapeSequence({ altKey: true, keyCode: 122 }).key, '\x1b[23;3~'); + assert.equal(xterm.evaluateKeyEscapeSequence({ altKey: true, keyCode: 123 }).key, '\x1b[24;3~'); + + assert.equal(xterm.evaluateKeyEscapeSequence({ ctrlKey: true, keyCode: 112 }).key, '\x1b[1;5P'); + assert.equal(xterm.evaluateKeyEscapeSequence({ ctrlKey: true, keyCode: 113 }).key, '\x1b[1;5Q'); + assert.equal(xterm.evaluateKeyEscapeSequence({ ctrlKey: true, keyCode: 114 }).key, '\x1b[1;5R'); + assert.equal(xterm.evaluateKeyEscapeSequence({ ctrlKey: true, keyCode: 115 }).key, '\x1b[1;5S'); + assert.equal(xterm.evaluateKeyEscapeSequence({ ctrlKey: true, keyCode: 116 }).key, '\x1b[15;5~'); + assert.equal(xterm.evaluateKeyEscapeSequence({ ctrlKey: true, keyCode: 117 }).key, '\x1b[17;5~'); + assert.equal(xterm.evaluateKeyEscapeSequence({ ctrlKey: true, keyCode: 118 }).key, '\x1b[18;5~'); + assert.equal(xterm.evaluateKeyEscapeSequence({ ctrlKey: true, keyCode: 119 }).key, '\x1b[19;5~'); + assert.equal(xterm.evaluateKeyEscapeSequence({ ctrlKey: true, keyCode: 120 }).key, '\x1b[20;5~'); + assert.equal(xterm.evaluateKeyEscapeSequence({ ctrlKey: true, keyCode: 121 }).key, '\x1b[21;5~'); + assert.equal(xterm.evaluateKeyEscapeSequence({ ctrlKey: true, keyCode: 122 }).key, '\x1b[23;5~'); + assert.equal(xterm.evaluateKeyEscapeSequence({ ctrlKey: true, keyCode: 123 }).key, '\x1b[24;5~'); + }); }); describe('attachCustomEventHandler', function () {