eugen-keeper commented on code in PR #608:
URL: https://github.com/apache/guacamole-server/pull/608#discussion_r2376378971
##########
src/terminal/terminal.c:
##########
@@ -1529,7 +1537,56 @@ static int __guac_terminal_send_key(guac_terminal* term,
int keysym, int pressed
/* Typeable keys of number pad */
else if (keysym >= 0xFFAA && keysym <= 0xFFB9) {
char value = keysym - 0xFF80;
- guac_terminal_send_data(term, &value, sizeof(value));
+ if (term->func_keys_and_keypad ==
GUAC_TERMINAL_FUNC_KEYS_AND_KEYPAD_VT100PLUS &&
+ term->application_keypad_keys) {
+ /* https://vt100.net/docs/vt100-ug/chapter3.html */
+ switch (value) {
+ case '0':
+ return guac_terminal_send_string(term, "\x1BOp");
+ case '1':
+ return guac_terminal_send_string(term, "\x1BOq");
+ case '2':
+ return guac_terminal_send_string(term, "\x1BOr");
+ case '3':
+ return guac_terminal_send_string(term, "\x1BOs");
+ case '4':
+ return guac_terminal_send_string(term, "\x1BOt");
+ case '5':
+ return guac_terminal_send_string(term, "\x1BOu");
+ case '6':
+ return guac_terminal_send_string(term, "\x1BOv");
+ case '7':
+ return guac_terminal_send_string(term, "\x1BOw");
+ case '8':
+ return guac_terminal_send_string(term, "\x1BOx");
+ case '9':
+ return guac_terminal_send_string(term, "\x1BOy");
+ case '-':
+ return guac_terminal_send_string(term, "\x1BOm");
+ case '.':
+ return guac_terminal_send_string(term, "\x1BOn");
+ /*
+ * There is no comma on the regular keypad, so we use '*'
to send
+ * the appropriate code.
+ */
+ case '*':
+ return guac_terminal_send_string(term, "\x1BOl");
+ /*
+ * At least in some environments JS does not differentiate
regular
+ * and keypad ENTER and its location property is always 0.
So we
+ * use '+' to send the appropriate ENTER escape code.
+ */
+ case '+':
+ return guac_terminal_send_string(term, "\x1BOM");
Review Comment:
Yes, there is no + on VT100 keyboard.
##########
src/terminal/terminal.c:
##########
@@ -1529,7 +1537,56 @@ static int __guac_terminal_send_key(guac_terminal* term,
int keysym, int pressed
/* Typeable keys of number pad */
else if (keysym >= 0xFFAA && keysym <= 0xFFB9) {
char value = keysym - 0xFF80;
- guac_terminal_send_data(term, &value, sizeof(value));
+ if (term->func_keys_and_keypad ==
GUAC_TERMINAL_FUNC_KEYS_AND_KEYPAD_VT100PLUS &&
+ term->application_keypad_keys) {
+ /* https://vt100.net/docs/vt100-ug/chapter3.html */
+ switch (value) {
+ case '0':
+ return guac_terminal_send_string(term, "\x1BOp");
+ case '1':
+ return guac_terminal_send_string(term, "\x1BOq");
+ case '2':
+ return guac_terminal_send_string(term, "\x1BOr");
+ case '3':
+ return guac_terminal_send_string(term, "\x1BOs");
+ case '4':
+ return guac_terminal_send_string(term, "\x1BOt");
+ case '5':
+ return guac_terminal_send_string(term, "\x1BOu");
+ case '6':
+ return guac_terminal_send_string(term, "\x1BOv");
+ case '7':
+ return guac_terminal_send_string(term, "\x1BOw");
+ case '8':
+ return guac_terminal_send_string(term, "\x1BOx");
+ case '9':
+ return guac_terminal_send_string(term, "\x1BOy");
Review Comment:
Fixed
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]