Skip to content

Commit 8440cb2

Browse files
committed
Using e.ctrlKey inplace of keys[17].
Problem: Terminal become unresponsive when browser short-cuts are keyed in. Ctrl + l clears terminal and moves focus to location bar in browser (firefox). After keying this short-cut terminal will not show any output even if user presses any key till he/she press Ctrl key alone. Similar behavior is observed with Ctrl + [b, B, o, j, A, s, S, f, k, K, d, D, b, I, e, E , f4, n, P, tab, T, N, sht + del] etc. Problem Analysis: When Ctrl is pressed in combination with other key(s) then key up event is fired for the key which is released first. For example if Ctrl + l is pressed and l is released first then key-up event will be fired for l key not for Ctrl key. So keys[17] will not be deleted and the next key-press is treated as pressed with Ctrl key(sends as "keyCode" not as "command). But when Ctrl is pressed alone and released, it deletes keys[17] and hence terminal works again. Fix: Instead of relying on keys[17] for checking combination with Ctrl key we should use e.ctrlKey. Same can be done for alt key, keys[18] should be replaced with e.altKey where e is the event.
1 parent 554c547 commit 8440cb2

1 file changed

Lines changed: 11 additions & 9 deletions

File tree

src/main/webapp/admin/secure_shell.jsp

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -150,8 +150,8 @@
150150
if (String.fromCharCode(keyCode) && String.fromCharCode(keyCode) != ''
151151
&& !keys[91] && !keys[93] && !keys[224] && !keys[27]
152152
&& !keys[37] && !keys[38] && !keys[39] && !keys[40]
153-
&& !keys[13] && !keys[8] && !keys[9] && (!keys[17]
154-
|| keys[18]) && !keys[46] && !keys[45] && !keys[33]
153+
&& !keys[13] && !keys[8] && !keys[9] && (!e.ctrlKey
154+
|| e.altKey) && !keys[46] && !keys[45] && !keys[33]
155155
&& !keys[34] && !keys[35] && !keys[36]) {
156156
var cmdStr = String.fromCharCode(keyCode);
157157
connection.send(JSON.stringify({id: getActiveTermsInstanceIds(), command: cmdStr}));
@@ -164,12 +164,7 @@
164164
if (termFocus) {
165165
var keyCode = (e.keyCode) ? e.keyCode : e.charCode;
166166
keys[keyCode] = true;
167-
//prevent default for unix ctrl commands
168-
if (keys[17] && (keyCode == 83 || keyCode == 81 || keyCode == 84 || keyCode == 220 || keyCode == 90 || keyCode == 72 || keyCode == 87 || keyCode == 85 || keyCode == 82 || keyCode == 68)) {
169-
e.preventDefault();
170-
e.stopImmediatePropagation();
171-
}
172-
167+
173168
//27 - ESC
174169
//37 - LEFT
175170
//38 - UP
@@ -185,9 +180,16 @@
185180
//34 - PG DOWN
186181
//35 - END
187182
//36 - HOME
188-
if((keys[17] && !keys[18]) || keyCode == 27 || keyCode == 37 || keyCode == 38 || keyCode == 39 || keyCode == 40 || keyCode == 13 || keyCode == 8 || keyCode == 9 || keyCode == 46 || keyCode == 45 || keyCode == 33 || keyCode == 34 || keyCode == 35 || keyCode == 36) {
183+
if((e.ctrlKey && !e.altKey) || keyCode == 27 || keyCode == 37 || keyCode == 38 || keyCode == 39 || keyCode == 40 || keyCode == 13 || keyCode == 8 || keyCode == 9 || keyCode == 46 || keyCode == 45 || keyCode == 33 || keyCode == 34 || keyCode == 35 || keyCode == 36) {
189184
connection.send(JSON.stringify({id: getActiveTermsInstanceIds(), keyCode: keyCode}));
190185
}
186+
187+
//prevent default for unix ctrl commands
188+
if (e.ctrlKey && (keyCode == 83 || keyCode == 81 || keyCode == 84 || keyCode == 220 || keyCode == 90 || keyCode == 72 || keyCode == 87 || keyCode == 85 || keyCode == 82 || keyCode == 68)) {
189+
e.preventDefault();
190+
e.stopImmediatePropagation();
191+
}
192+
191193
}
192194
193195
});

0 commit comments

Comments
 (0)