blob: 5433b2acfc6889acf2765484b52a841645121dce [file] [log] [blame]
Yang Cheng6d1d6002019-02-27 11:16:24 +08001'use strict';
2
3var EscapeSequences = require('xterm/lib/common/data/EscapeSequences');
4
5var BACKSPACE = 8;
6var PAGE_UP = 33;
7var PAGE_DOWN = 34;
8var END = 35;
9var HOME = 36;
10var INSERT = 45;
11var DEL = 46;
12var F1 = 112;
13var F2 = 113;
14var F3 = 114;
15var F4 = 115;
16var F5 = 116;
17var F6 = 117;
18var F7 = 118;
19var F8 = 119;
20var F9 = 120;
21var F10 = 121;
22var F11 = 122;
23var F12 = 123;
24
25/*
26VT100+ Character and Key Extensions
27
28Character or key | Character sequence
29---------------------------------------
30HOME key | <ESC>h
31END key | <ESC>k
32INSERT key | <ESC>+
33DELETE key | <ESC>-
34PAGE UP key | <ESC>?
35PAGE DOWN key | <ESC>/
36F1 key | <ESC>1
37F2 key | <ESC>2
38F3 key | <ESC>3
39F4 key | <ESC>4
40F5 key | <ESC>5
41F6 key | <ESC>6
42F7 key | <ESC>7
43F8 key | <ESC>8
44F9 key | <ESC>9
45F10 key | <ESC>0
46F11 key | <ESC>!
47F12 key | <ESC>@
48
49*/
50
51function customVT100PlusKey(ev, term) {
52 var modifiers = (ev.shiftKey ? 1 : 0) | (ev.altKey ? 2 : 0) |
53 (ev.ctrlKey ? 4 : 0) | (ev.metaKey ? 8 : 0);
54 if (((modifiers) && (ev.keyCode != BACKSPACE)) || (ev.type != 'keydown')) {
55 return true;
56 }
57 switch (ev.keyCode) {
58 case BACKSPACE:
59 if (ev.altKey) {
60 return true;
61 } else if (!ev.shiftKey) {
62 term.handler(EscapeSequences.C0.BS); // Backspace
63 } else {
64 term.handler(EscapeSequences.C0.DEL); // Delete
65 }
66 break;
67 case PAGE_UP:
68 term.handler(EscapeSequences.C0.ESC + '?');
69 break;
70 case PAGE_DOWN:
71 term.handler(EscapeSequences.C0.ESC + '/');
72 break;
73 case END:
74 term.handler(EscapeSequences.C0.ESC + 'k');
75 break;
76 case HOME:
77 term.handler(EscapeSequences.C0.ESC + 'h');
78 break;
79 case INSERT:
80 term.handler(EscapeSequences.C0.ESC + '+');
81 break;
82 case DEL:
83 term.handler(EscapeSequences.C0.ESC + '-');
84 break;
85 case F1:
86 term.handler(EscapeSequences.C0.ESC + '1');
87 break;
88 case F2:
89 term.handler(EscapeSequences.C0.ESC + '2');
90 break;
91 case F3:
92 term.handler(EscapeSequences.C0.ESC + '3');
93 break;
94 case F4:
95 term.handler(EscapeSequences.C0.ESC + '4');
96 break;
97 case F5:
98 term.handler(EscapeSequences.C0.ESC + '5');
99 break;
100 case F6:
101 term.handler(EscapeSequences.C0.ESC + '6');
102 break;
103 case F7:
104 term.handler(EscapeSequences.C0.ESC + '7');
105 break;
106 case F8:
107 term.handler(EscapeSequences.C0.ESC + '8');
108 break;
109 case F9:
110 term.handler(EscapeSequences.C0.ESC + '9');
111 break;
112 case F10:
113 term.handler(EscapeSequences.C0.ESC + '0');
114 break;
115 case F11:
116 term.handler(EscapeSequences.C0.ESC + '!');
117 break;
118 case F12:
119 term.handler(EscapeSequences.C0.ESC + '@');
120 break;
121 default:
122 return true;
123 }
124 return false;
125}
126exports.customVT100PlusKey = customVT100PlusKey;