summaryrefslogtreecommitdiffstats
path: root/app/common/directives/vt100plus.js
blob: 5433b2acfc6889acf2765484b52a841645121dce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
'use strict';

var EscapeSequences = require('xterm/lib/common/data/EscapeSequences');

var BACKSPACE = 8;
var PAGE_UP = 33;
var PAGE_DOWN = 34;
var END = 35;
var HOME = 36;
var INSERT = 45;
var DEL = 46;
var F1 = 112;
var F2 = 113;
var F3 = 114;
var F4 = 115;
var F5 = 116;
var F6 = 117;
var F7 = 118;
var F8 = 119;
var F9 = 120;
var F10 = 121;
var F11 = 122;
var F12 = 123;

/*
VT100+ Character and Key Extensions

Character or key  | Character sequence
---------------------------------------
HOME key          | <ESC>h
END key           | <ESC>k
INSERT key        | <ESC>+
DELETE key        | <ESC>-
PAGE UP key       | <ESC>?
PAGE DOWN key     | <ESC>/
F1 key            | <ESC>1
F2 key            | <ESC>2
F3 key            | <ESC>3
F4 key            | <ESC>4
F5 key            | <ESC>5
F6 key            | <ESC>6
F7 key            | <ESC>7
F8 key            | <ESC>8
F9 key            | <ESC>9
F10 key           | <ESC>0
F11 key           | <ESC>!
F12 key           | <ESC>@

*/

function customVT100PlusKey(ev, term) {
  var modifiers = (ev.shiftKey ? 1 : 0) | (ev.altKey ? 2 : 0) |
      (ev.ctrlKey ? 4 : 0) | (ev.metaKey ? 8 : 0);
  if (((modifiers) && (ev.keyCode != BACKSPACE)) || (ev.type != 'keydown')) {
    return true;
  }
  switch (ev.keyCode) {
    case BACKSPACE:
      if (ev.altKey) {
        return true;
      } else if (!ev.shiftKey) {
        term.handler(EscapeSequences.C0.BS);  // Backspace
      } else {
        term.handler(EscapeSequences.C0.DEL);  // Delete
      }
      break;
    case PAGE_UP:
      term.handler(EscapeSequences.C0.ESC + '?');
      break;
    case PAGE_DOWN:
      term.handler(EscapeSequences.C0.ESC + '/');
      break;
    case END:
      term.handler(EscapeSequences.C0.ESC + 'k');
      break;
    case HOME:
      term.handler(EscapeSequences.C0.ESC + 'h');
      break;
    case INSERT:
      term.handler(EscapeSequences.C0.ESC + '+');
      break;
    case DEL:
      term.handler(EscapeSequences.C0.ESC + '-');
      break;
    case F1:
      term.handler(EscapeSequences.C0.ESC + '1');
      break;
    case F2:
      term.handler(EscapeSequences.C0.ESC + '2');
      break;
    case F3:
      term.handler(EscapeSequences.C0.ESC + '3');
      break;
    case F4:
      term.handler(EscapeSequences.C0.ESC + '4');
      break;
    case F5:
      term.handler(EscapeSequences.C0.ESC + '5');
      break;
    case F6:
      term.handler(EscapeSequences.C0.ESC + '6');
      break;
    case F7:
      term.handler(EscapeSequences.C0.ESC + '7');
      break;
    case F8:
      term.handler(EscapeSequences.C0.ESC + '8');
      break;
    case F9:
      term.handler(EscapeSequences.C0.ESC + '9');
      break;
    case F10:
      term.handler(EscapeSequences.C0.ESC + '0');
      break;
    case F11:
      term.handler(EscapeSequences.C0.ESC + '!');
      break;
    case F12:
      term.handler(EscapeSequences.C0.ESC + '@');
      break;
    default:
      return true;
  }
  return false;
}
exports.customVT100PlusKey = customVT100PlusKey;
OpenPOWER on IntegriCloud