Skip to content

Commit ed551ef

Browse files
GUACAMOLE-287: Add constants for "magic numbers" in function __guac_terminal_send_key.
1 parent b098409 commit ed551ef

File tree

2 files changed

+539
-48
lines changed

2 files changed

+539
-48
lines changed

src/terminal/terminal.c

Lines changed: 129 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1443,13 +1443,13 @@ static int __guac_terminal_send_key(guac_terminal* term, int keysym, int pressed
14431443
}
14441444

14451445
/* Track modifiers */
1446-
if (keysym == 0xFFE3 || keysym == 0xFFE4)
1446+
if (keysym == GUAC_TERMINAL_KEY_CTRL_L || keysym == GUAC_TERMINAL_KEY_CTRL_R)
14471447
term->mod_ctrl = pressed;
1448-
else if (keysym == 0xFFE7 || keysym == 0xFFE8)
1448+
else if (keysym == GUAC_TERMINAL_KEY_META_L || keysym == GUAC_TERMINAL_KEY_META_R)
14491449
term->mod_meta = pressed;
1450-
else if (keysym == 0xFFE9 || keysym == 0xFFEA)
1450+
else if (keysym == GUAC_TERMINAL_KEY_ALT_L || keysym == GUAC_TERMINAL_KEY_ALT_R)
14511451
term->mod_alt = pressed;
1452-
else if (keysym == 0xFFE1 || keysym == 0xFFE2)
1452+
else if (keysym == GUAC_TERMINAL_KEY_SHIFT_L || keysym == GUAC_TERMINAL_KEY_SHIFT_R)
14531453
term->mod_shift = pressed;
14541454

14551455
/* If key pressed */
@@ -1472,37 +1472,37 @@ static int __guac_terminal_send_key(guac_terminal* term, int keysym, int pressed
14721472
if (term->mod_shift) {
14731473

14741474
/* Home */
1475-
if (keysym == 0xFF50 || keysym == 0xFF95) {
1475+
if (keysym == GUAC_TERMINAL_KEY_HOME || keysym == GUAC_TERMINAL_KEY_KP_HOME) {
14761476
guac_terminal_scroll_display_up(term, term->max_scrollback);
14771477
return 0;
14781478
}
14791479

14801480
/* End */
1481-
if (keysym == 0xFF57 || keysym == 0xFF9C) {
1481+
if (keysym == GUAC_TERMINAL_KEY_END || keysym == GUAC_TERMINAL_KEY_KP_END) {
14821482
guac_terminal_scroll_display_down(term, term->max_scrollback);
14831483
return 0;
14841484
}
14851485

14861486
/* Page up */
1487-
if (keysym == 0xFF55) {
1487+
if (keysym == GUAC_TERMINAL_KEY_PAGEUP || keysym == GUAC_TERMINAL_KEY_KP_PAGEUP) {
14881488
guac_terminal_scroll_display_up(term, term->term_height);
14891489
return 0;
14901490
}
14911491

14921492
/* Page down */
1493-
if (keysym == 0xFF56) {
1493+
if (keysym == GUAC_TERMINAL_KEY_PAGEDOWN || keysym == GUAC_TERMINAL_KEY_KP_PAGEDOWN) {
14941494
guac_terminal_scroll_display_down(term, term->term_height);
14951495
return 0;
14961496
}
14971497

14981498
/* Up */
1499-
if (keysym == 0xFF52 || keysym == 0xFF97) {
1499+
if (keysym == GUAC_TERMINAL_KEY_UP || keysym == GUAC_TERMINAL_KEY_KP_UP) {
15001500
guac_terminal_scroll_display_up(term, 1);
15011501
return 0;
15021502
}
15031503

15041504
/* Down */
1505-
if (keysym == 0xFF54 || keysym == 0xFF99) {
1505+
if (keysym == GUAC_TERMINAL_KEY_DOWN || keysym == GUAC_TERMINAL_KEY_KP_DOWN) {
15061506
guac_terminal_scroll_display_down(term, 1);
15071507
return 0;
15081508
}
@@ -1515,7 +1515,7 @@ static int __guac_terminal_send_key(guac_terminal* term, int keysym, int pressed
15151515

15161516
/* If alt being held, also send escape character */
15171517
if (term->mod_alt)
1518-
guac_terminal_send_string(term, "\x1B");
1518+
guac_terminal_send_string(term, GUAC_TERMINAL_ASCII_ESCAPE);
15191519

15201520
/* Translate Ctrl+letter to control code */
15211521
if (term->mod_ctrl) {
@@ -1543,20 +1543,20 @@ static int __guac_terminal_send_key(guac_terminal* term, int keysym, int pressed
15431543
data = (char) (keysym - '3' + 0x1B);
15441544

15451545
/* CTRL+Left: return to previous word */
1546-
else if (keysym == 0xFF51 || keysym == 0xFF96)
1547-
return guac_terminal_send_string(term, "\033[1;5D");
1546+
else if (keysym == GUAC_TERMINAL_KEY_LEFT || keysym == GUAC_TERMINAL_KEY_KP_LEFT)
1547+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_PREV_WORD);
15481548

15491549
/* CTRL+Right: go to next word */
1550-
else if (keysym == 0xFF53 || keysym == 0xFF98)
1551-
return guac_terminal_send_string(term, "\033[1;5C");
1550+
else if (keysym == GUAC_TERMINAL_KEY_RIGHT || keysym == GUAC_TERMINAL_KEY_KP_RIGHT)
1551+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_NEXT_WORD);
15521552

15531553
/* CTRL+Backspace: remove word (map to CTRL+w) */
1554-
else if (keysym == 0xFF08)
1554+
else if (keysym == GUAC_TERMINAL_KEY_BACKSPACE)
15551555
data = (char) 23;
15561556

15571557
/* CTRL+Supr: remove word to right */
1558-
else if (keysym == 0xFFFF)
1559-
return guac_terminal_send_string(term, "\033D");
1558+
else if (keysym == GUAC_TERMINAL_KEY_DELETE || keysym == GUAC_TERMINAL_KEY_KP_DELETE)
1559+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_DELETE_WORD);
15601560

15611561
/* Otherwise ignore */
15621562
else
@@ -1627,36 +1627,82 @@ static int __guac_terminal_send_key(guac_terminal* term, int keysym, int pressed
16271627
else {
16281628

16291629
/* Backspace can vary based on configuration of terminal by client. */
1630-
if (keysym == 0xFF08) {
1630+
if (keysym == GUAC_TERMINAL_KEY_BACKSPACE) {
16311631
char backspace_str[] = { term->backspace, '\0' };
16321632
return guac_terminal_send_string(term, backspace_str);
16331633
}
1634-
if (keysym == 0xFF09 || keysym == 0xFF89) return guac_terminal_send_string(term, "\x09"); /* Tab */
1635-
if (keysym == 0xFF0D || keysym == 0xFF8D) return guac_terminal_send_string(term, "\x0D"); /* Enter */
1636-
if (keysym == 0xFF1B) return guac_terminal_send_string(term, "\x1B"); /* Esc */
16371634

1638-
if (keysym == 0xFF50 || keysym == 0xFF95) return guac_terminal_send_string(term, "\x1B[1~"); /* Home */
1635+
/* Tab */
1636+
if (keysym == GUAC_TERMINAL_KEY_TAB || keysym == GUAC_TERMINAL_KEY_KP_TAB)
1637+
return guac_terminal_send_string(term, GUAC_TERMINAL_ASCII_TAB);
1638+
1639+
/* Enter */
1640+
if (keysym == GUAC_TERMINAL_KEY_ENTER || keysym == GUAC_TERMINAL_KEY_KP_ENTER)
1641+
return guac_terminal_send_string(term, GUAC_TERMINAL_ASCII_CR);
1642+
1643+
/* Esc */
1644+
if (keysym == GUAC_TERMINAL_KEY_ESCAPE)
1645+
return guac_terminal_send_string(term, GUAC_TERMINAL_ASCII_ESCAPE);
1646+
1647+
/* Home */
1648+
if (keysym == GUAC_TERMINAL_KEY_HOME || keysym == GUAC_TERMINAL_KEY_KP_HOME)
1649+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_HOME);
16391650

16401651
/* Arrow keys w/ application cursor */
16411652
if (term->application_cursor_keys) {
1642-
if (keysym == 0xFF51 || keysym == 0xFF96) return guac_terminal_send_string(term, "\x1BOD"); /* Left */
1643-
if (keysym == 0xFF52 || keysym == 0xFF97) return guac_terminal_send_string(term, "\x1BOA"); /* Up */
1644-
if (keysym == 0xFF53 || keysym == 0xFF98) return guac_terminal_send_string(term, "\x1BOC"); /* Right */
1645-
if (keysym == 0xFF54 || keysym == 0xFF99) return guac_terminal_send_string(term, "\x1BOB"); /* Down */
1653+
1654+
/* Left */
1655+
if (keysym == GUAC_TERMINAL_KEY_LEFT || keysym == GUAC_TERMINAL_KEY_KP_LEFT)
1656+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_APP_CURSOR_LEFT);
1657+
1658+
/* Up */
1659+
if (keysym == GUAC_TERMINAL_KEY_UP || keysym == GUAC_TERMINAL_KEY_KP_UP)
1660+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_APP_CURSOR_UP);
1661+
1662+
/* Right */
1663+
if (keysym == GUAC_TERMINAL_KEY_RIGHT || keysym == GUAC_TERMINAL_KEY_KP_RIGHT)
1664+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_APP_CURSOR_RIGHT);
1665+
1666+
/* Down */
1667+
if (keysym == GUAC_TERMINAL_KEY_DOWN || keysym == GUAC_TERMINAL_KEY_KP_DOWN)
1668+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_APP_CURSOR_DOWN);
16461669
}
16471670
else {
1648-
if (keysym == 0xFF51 || keysym == 0xFF96) return guac_terminal_send_string(term, "\x1B[D"); /* Left */
1649-
if (keysym == 0xFF52 || keysym == 0xFF97) return guac_terminal_send_string(term, "\x1B[A"); /* Up */
1650-
if (keysym == 0xFF53 || keysym == 0xFF98) return guac_terminal_send_string(term, "\x1B[C"); /* Right */
1651-
if (keysym == 0xFF54 || keysym == 0xFF99) return guac_terminal_send_string(term, "\x1B[B"); /* Down */
1671+
1672+
/* Left */
1673+
if (keysym == GUAC_TERMINAL_KEY_LEFT || keysym == GUAC_TERMINAL_KEY_KP_LEFT)
1674+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_CURSOR_LEFT);
1675+
1676+
/* Up */
1677+
if (keysym == GUAC_TERMINAL_KEY_UP || keysym == GUAC_TERMINAL_KEY_KP_UP)
1678+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_CURSOR_UP);
1679+
1680+
/* Right */
1681+
if (keysym == GUAC_TERMINAL_KEY_RIGHT || keysym == GUAC_TERMINAL_KEY_KP_RIGHT)
1682+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_CURSOR_RIGHT);
1683+
1684+
/* Down */
1685+
if (keysym == GUAC_TERMINAL_KEY_DOWN || keysym == GUAC_TERMINAL_KEY_KP_DOWN)
1686+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_CURSOR_DOWN);
16521687
}
16531688

1654-
if (keysym == 0xFF55 || keysym == 0xFF9A) return guac_terminal_send_string(term, "\x1B[5~"); /* Page up */
1655-
if (keysym == 0xFF56 || keysym == 0xFF9B) return guac_terminal_send_string(term, "\x1B[6~"); /* Page down */
1656-
if (keysym == 0xFF57 || keysym == 0xFF9C) return guac_terminal_send_string(term, "\x1B[4~"); /* End */
1689+
/* Page up */
1690+
if (keysym == GUAC_TERMINAL_KEY_PAGEUP || keysym == GUAC_TERMINAL_KEY_KP_PAGEUP)
1691+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_PAGEUP);
16571692

1658-
if (keysym == 0xFF63 || keysym == 0xFF9E) return guac_terminal_send_string(term, "\x1B[2~"); /* Insert */
1693+
/* Page down */
1694+
if (keysym == GUAC_TERMINAL_KEY_PAGEDOWN || keysym == GUAC_TERMINAL_KEY_KP_PAGEDOWN)
1695+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_PAGEDOWN);
16591696

1697+
/* End */
1698+
if (keysym == GUAC_TERMINAL_KEY_END || keysym == GUAC_TERMINAL_KEY_KP_END)
1699+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_END);
1700+
1701+
/* Insert */
1702+
if (keysym == GUAC_TERMINAL_KEY_INSERT || keysym == GUAC_TERMINAL_KEY_KP_INSERT)
1703+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_INSERT);
1704+
1705+
/* F1 */
16601706
if (term->func_keys_and_keypad == GUAC_TERMINAL_FUNC_KEYS_AND_KEYPAD_VT100) {
16611707
/* https://vt100.net/docs/vt100-ug/chapter3.html */
16621708
if (keysym == 0xFFBE || keysym == 0xFF91) return guac_terminal_send_string(term, "\x1BOP"); /* F1 */
@@ -1667,22 +1713,57 @@ static int __guac_terminal_send_key(guac_terminal* term, int keysym, int pressed
16671713
if (keysym == 0xFFC2) return guac_terminal_send_string(term, "\x1B[15~"); /* F5 */
16681714
}
16691715
else {
1670-
if (keysym == 0xFFBE || keysym == 0xFF91) return guac_terminal_send_string(term, "\x1B[[A"); /* F1 */
1671-
if (keysym == 0xFFBF || keysym == 0xFF92) return guac_terminal_send_string(term, "\x1B[[B"); /* F2 */
1672-
if (keysym == 0xFFC0 || keysym == 0xFF93) return guac_terminal_send_string(term, "\x1B[[C"); /* F3 */
1673-
if (keysym == 0xFFC1 || keysym == 0xFF94) return guac_terminal_send_string(term, "\x1B[[D"); /* F4 */
1674-
if (keysym == 0xFFC2) return guac_terminal_send_string(term, "\x1B[[E"); /* F5 */
1716+
if (keysym == GUAC_TERMINAL_KEY_F1 || keysym == GUAC_TERMINAL_KEY_KP_F1)
1717+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_F1);
1718+
1719+
/* F2 */
1720+
if (keysym == GUAC_TERMINAL_KEY_F2 || keysym == GUAC_TERMINAL_KEY_KP_F2)
1721+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_F2);
1722+
1723+
/* F3 */
1724+
if (keysym == GUAC_TERMINAL_KEY_F3 || keysym == GUAC_TERMINAL_KEY_KP_F3)
1725+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_F3);
1726+
1727+
/* F4 */
1728+
if (keysym == GUAC_TERMINAL_KEY_F4 || keysym == GUAC_TERMINAL_KEY_KP_F4)
1729+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_F4);
1730+
1731+
/* F5 */
1732+
if (keysym == GUAC_TERMINAL_KEY_F5)
1733+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_F5);
1734+
16751735
}
1736+
/* F6 */
1737+
if (keysym == GUAC_TERMINAL_KEY_F6)
1738+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_F6);
1739+
1740+
/* F7 */
1741+
if (keysym == GUAC_TERMINAL_KEY_F7)
1742+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_F7);
1743+
1744+
/* F8 */
1745+
if (keysym == GUAC_TERMINAL_KEY_F8)
1746+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_F8);
1747+
1748+
/* F9 */
1749+
if (keysym == GUAC_TERMINAL_KEY_F9)
1750+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_F9);
1751+
1752+
/* F10 */
1753+
if (keysym == GUAC_TERMINAL_KEY_F10)
1754+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_F10);
1755+
1756+
/* F11 */
1757+
if (keysym == GUAC_TERMINAL_KEY_F11)
1758+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_F11);
16761759

1677-
if (keysym == 0xFFC3) return guac_terminal_send_string(term, "\x1B[17~"); /* F6 */
1678-
if (keysym == 0xFFC4) return guac_terminal_send_string(term, "\x1B[18~"); /* F7 */
1679-
if (keysym == 0xFFC5) return guac_terminal_send_string(term, "\x1B[19~"); /* F8 */
1680-
if (keysym == 0xFFC6) return guac_terminal_send_string(term, "\x1B[20~"); /* F9 */
1681-
if (keysym == 0xFFC7) return guac_terminal_send_string(term, "\x1B[21~"); /* F10 */
1682-
if (keysym == 0xFFC8) return guac_terminal_send_string(term, "\x1B[22~"); /* F11 */
1683-
if (keysym == 0xFFC9) return guac_terminal_send_string(term, "\x1B[23~"); /* F12 */
1760+
/* F12 */
1761+
if (keysym == GUAC_TERMINAL_KEY_F12)
1762+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_F12);
16841763

1685-
if (keysym == 0xFFFF || keysym == 0xFF9F) return guac_terminal_send_string(term, "\x1B[3~"); /* Delete */
1764+
/* Delete */
1765+
if (keysym == GUAC_TERMINAL_KEY_DELETE || keysym == GUAC_TERMINAL_KEY_KP_DELETE)
1766+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_DELETE);
16861767

16871768
/* Ignore unknown keys */
16881769
guac_client_log(term->client, GUAC_LOG_DEBUG,

0 commit comments

Comments
 (0)