]> git.proxmox.com Git - mirror_xterm.js.git/commitdiff
add modifier+F1-F12 keys
authorayapi <colors.aya@gmail.com>
Fri, 26 Aug 2016 16:13:01 +0000 (01:13 +0900)
committerayapi <colors.aya@gmail.com>
Fri, 26 Aug 2016 16:13:01 +0000 (01:13 +0900)
src/xterm.js
test/test.js

index ddf19da1ee0a1f8a556f7c36d5056bb456ca3009..bcf44d01f357acb22cca20a22a3f7af780982492 100644 (file)
           }
           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) {
index bb2797e3694c251d6776ce280c93c2556398a7a6..91e6ddc4690f6075d6b236240ac129551a30d37c 100644 (file)
@@ -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 () {