Skip to content

Commit 0813e93

Browse files
GUACAMOLE-287: Add constants for "magic numbers" in function __guac_terminal_send_key.
1 parent 9dff124 commit 0813e93

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
@@ -1435,13 +1435,13 @@ static int __guac_terminal_send_key(guac_terminal* term, int keysym, int pressed
14351435
}
14361436

14371437
/* Track modifiers */
1438-
if (keysym == 0xFFE3 || keysym == 0xFFE4)
1438+
if (keysym == GUAC_TERMINAL_KEY_CTRL_L || keysym == GUAC_TERMINAL_KEY_CTRL_R)
14391439
term->mod_ctrl = pressed;
1440-
else if (keysym == 0xFFE7 || keysym == 0xFFE8)
1440+
else if (keysym == GUAC_TERMINAL_KEY_META_L || keysym == GUAC_TERMINAL_KEY_META_R)
14411441
term->mod_meta = pressed;
1442-
else if (keysym == 0xFFE9 || keysym == 0xFFEA)
1442+
else if (keysym == GUAC_TERMINAL_KEY_ALT_L || keysym == GUAC_TERMINAL_KEY_ALT_R)
14431443
term->mod_alt = pressed;
1444-
else if (keysym == 0xFFE1 || keysym == 0xFFE2)
1444+
else if (keysym == GUAC_TERMINAL_KEY_SHIFT_L || keysym == GUAC_TERMINAL_KEY_SHIFT_R)
14451445
term->mod_shift = pressed;
14461446

14471447
/* If key pressed */
@@ -1464,37 +1464,37 @@ static int __guac_terminal_send_key(guac_terminal* term, int keysym, int pressed
14641464
if (term->mod_shift) {
14651465

14661466
/* Home */
1467-
if (keysym == 0xFF50 || keysym == 0xFF95) {
1467+
if (keysym == GUAC_TERMINAL_KEY_HOME || keysym == GUAC_TERMINAL_KEY_KP_HOME) {
14681468
guac_terminal_scroll_display_up(term, term->max_scrollback);
14691469
return 0;
14701470
}
14711471

14721472
/* End */
1473-
if (keysym == 0xFF57 || keysym == 0xFF9C) {
1473+
if (keysym == GUAC_TERMINAL_KEY_END || keysym == GUAC_TERMINAL_KEY_KP_END) {
14741474
guac_terminal_scroll_display_down(term, term->max_scrollback);
14751475
return 0;
14761476
}
14771477

14781478
/* Page up */
1479-
if (keysym == 0xFF55) {
1479+
if (keysym == GUAC_TERMINAL_KEY_PAGEUP || keysym == GUAC_TERMINAL_KEY_KP_PAGEUP) {
14801480
guac_terminal_scroll_display_up(term, term->term_height);
14811481
return 0;
14821482
}
14831483

14841484
/* Page down */
1485-
if (keysym == 0xFF56) {
1485+
if (keysym == GUAC_TERMINAL_KEY_PAGEDOWN || keysym == GUAC_TERMINAL_KEY_KP_PAGEDOWN) {
14861486
guac_terminal_scroll_display_down(term, term->term_height);
14871487
return 0;
14881488
}
14891489

14901490
/* Up */
1491-
if (keysym == 0xFF52 || keysym == 0xFF97) {
1491+
if (keysym == GUAC_TERMINAL_KEY_UP || keysym == GUAC_TERMINAL_KEY_KP_UP) {
14921492
guac_terminal_scroll_display_up(term, 1);
14931493
return 0;
14941494
}
14951495

14961496
/* Down */
1497-
if (keysym == 0xFF54 || keysym == 0xFF99) {
1497+
if (keysym == GUAC_TERMINAL_KEY_DOWN || keysym == GUAC_TERMINAL_KEY_KP_DOWN) {
14981498
guac_terminal_scroll_display_down(term, 1);
14991499
return 0;
15001500
}
@@ -1507,7 +1507,7 @@ static int __guac_terminal_send_key(guac_terminal* term, int keysym, int pressed
15071507

15081508
/* If alt being held, also send escape character */
15091509
if (term->mod_alt)
1510-
guac_terminal_send_string(term, "\x1B");
1510+
guac_terminal_send_string(term, GUAC_TERMINAL_ASCII_ESCAPE);
15111511

15121512
/* Translate Ctrl+letter to control code */
15131513
if (term->mod_ctrl) {
@@ -1535,20 +1535,20 @@ static int __guac_terminal_send_key(guac_terminal* term, int keysym, int pressed
15351535
data = (char) (keysym - '3' + 0x1B);
15361536

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

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

15451545
/* CTRL+Backspace: remove word (map to CTRL+w) */
1546-
else if (keysym == 0xFF08)
1546+
else if (keysym == GUAC_TERMINAL_KEY_BACKSPACE)
15471547
data = (char) 23;
15481548

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

15531553
/* Otherwise ignore */
15541554
else
@@ -1579,51 +1579,132 @@ static int __guac_terminal_send_key(guac_terminal* term, int keysym, int pressed
15791579
else {
15801580

15811581
/* Backspace can vary based on configuration of terminal by client. */
1582-
if (keysym == 0xFF08) {
1582+
if (keysym == GUAC_TERMINAL_KEY_BACKSPACE) {
15831583
char backspace_str[] = { term->backspace, '\0' };
15841584
return guac_terminal_send_string(term, backspace_str);
15851585
}
1586-
if (keysym == 0xFF09 || keysym == 0xFF89) return guac_terminal_send_string(term, "\x09"); /* Tab */
1587-
if (keysym == 0xFF0D || keysym == 0xFF8D) return guac_terminal_send_string(term, "\x0D"); /* Enter */
1588-
if (keysym == 0xFF1B) return guac_terminal_send_string(term, "\x1B"); /* Esc */
15891586

1590-
if (keysym == 0xFF50 || keysym == 0xFF95) return guac_terminal_send_string(term, "\x1B[1~"); /* Home */
1587+
/* Tab */
1588+
if (keysym == GUAC_TERMINAL_KEY_TAB || keysym == GUAC_TERMINAL_KEY_KP_TAB)
1589+
return guac_terminal_send_string(term, GUAC_TERMINAL_ASCII_TAB);
1590+
1591+
/* Enter */
1592+
if (keysym == GUAC_TERMINAL_KEY_ENTER || keysym == GUAC_TERMINAL_KEY_KP_ENTER)
1593+
return guac_terminal_send_string(term, GUAC_TERMINAL_ASCII_CR);
1594+
1595+
/* Esc */
1596+
if (keysym == GUAC_TERMINAL_KEY_ESCAPE)
1597+
return guac_terminal_send_string(term, GUAC_TERMINAL_ASCII_ESCAPE);
1598+
1599+
/* Home */
1600+
if (keysym == GUAC_TERMINAL_KEY_HOME || keysym == GUAC_TERMINAL_KEY_KP_HOME)
1601+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_HOME);
15911602

15921603
/* Arrow keys w/ application cursor */
15931604
if (term->application_cursor_keys) {
1594-
if (keysym == 0xFF51 || keysym == 0xFF96) return guac_terminal_send_string(term, "\x1BOD"); /* Left */
1595-
if (keysym == 0xFF52 || keysym == 0xFF97) return guac_terminal_send_string(term, "\x1BOA"); /* Up */
1596-
if (keysym == 0xFF53 || keysym == 0xFF98) return guac_terminal_send_string(term, "\x1BOC"); /* Right */
1597-
if (keysym == 0xFF54 || keysym == 0xFF99) return guac_terminal_send_string(term, "\x1BOB"); /* Down */
1605+
1606+
/* Left */
1607+
if (keysym == GUAC_TERMINAL_KEY_LEFT || keysym == GUAC_TERMINAL_KEY_KP_LEFT)
1608+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_APP_CURSOR_LEFT);
1609+
1610+
/* Up */
1611+
if (keysym == GUAC_TERMINAL_KEY_UP || keysym == GUAC_TERMINAL_KEY_KP_UP)
1612+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_APP_CURSOR_UP);
1613+
1614+
/* Right */
1615+
if (keysym == GUAC_TERMINAL_KEY_RIGHT || keysym == GUAC_TERMINAL_KEY_KP_RIGHT)
1616+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_APP_CURSOR_RIGHT);
1617+
1618+
/* Down */
1619+
if (keysym == GUAC_TERMINAL_KEY_DOWN || keysym == GUAC_TERMINAL_KEY_KP_DOWN)
1620+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_APP_CURSOR_DOWN);
15981621
}
15991622
else {
1600-
if (keysym == 0xFF51 || keysym == 0xFF96) return guac_terminal_send_string(term, "\x1B[D"); /* Left */
1601-
if (keysym == 0xFF52 || keysym == 0xFF97) return guac_terminal_send_string(term, "\x1B[A"); /* Up */
1602-
if (keysym == 0xFF53 || keysym == 0xFF98) return guac_terminal_send_string(term, "\x1B[C"); /* Right */
1603-
if (keysym == 0xFF54 || keysym == 0xFF99) return guac_terminal_send_string(term, "\x1B[B"); /* Down */
1623+
1624+
/* Left */
1625+
if (keysym == GUAC_TERMINAL_KEY_LEFT || keysym == GUAC_TERMINAL_KEY_KP_LEFT)
1626+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_CURSOR_LEFT);
1627+
1628+
/* Up */
1629+
if (keysym == GUAC_TERMINAL_KEY_UP || keysym == GUAC_TERMINAL_KEY_KP_UP)
1630+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_CURSOR_UP);
1631+
1632+
/* Right */
1633+
if (keysym == GUAC_TERMINAL_KEY_RIGHT || keysym == GUAC_TERMINAL_KEY_KP_RIGHT)
1634+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_CURSOR_RIGHT);
1635+
1636+
/* Down */
1637+
if (keysym == GUAC_TERMINAL_KEY_DOWN || keysym == GUAC_TERMINAL_KEY_KP_DOWN)
1638+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_CURSOR_DOWN);
16041639
}
16051640

1606-
if (keysym == 0xFF55 || keysym == 0xFF9A) return guac_terminal_send_string(term, "\x1B[5~"); /* Page up */
1607-
if (keysym == 0xFF56 || keysym == 0xFF9B) return guac_terminal_send_string(term, "\x1B[6~"); /* Page down */
1608-
if (keysym == 0xFF57 || keysym == 0xFF9C) return guac_terminal_send_string(term, "\x1B[4~"); /* End */
1641+
/* Page up */
1642+
if (keysym == GUAC_TERMINAL_KEY_PAGEUP || keysym == GUAC_TERMINAL_KEY_KP_PAGEUP)
1643+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_PAGEUP);
1644+
1645+
/* Page down */
1646+
if (keysym == GUAC_TERMINAL_KEY_PAGEDOWN || keysym == GUAC_TERMINAL_KEY_KP_PAGEDOWN)
1647+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_PAGEDOWN);
1648+
1649+
/* End */
1650+
if (keysym == GUAC_TERMINAL_KEY_END || keysym == GUAC_TERMINAL_KEY_KP_END)
1651+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_END);
1652+
1653+
/* Insert */
1654+
if (keysym == GUAC_TERMINAL_KEY_INSERT || keysym == GUAC_TERMINAL_KEY_KP_INSERT)
1655+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_INSERT);
1656+
1657+
/* F1 */
1658+
if (keysym == GUAC_TERMINAL_KEY_F1 || keysym == GUAC_TERMINAL_KEY_KP_F1)
1659+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_F1);
1660+
1661+
/* F2 */
1662+
if (keysym == GUAC_TERMINAL_KEY_F2 || keysym == GUAC_TERMINAL_KEY_KP_F2)
1663+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_F2);
1664+
1665+
/* F3 */
1666+
if (keysym == GUAC_TERMINAL_KEY_F3 || keysym == GUAC_TERMINAL_KEY_KP_F3)
1667+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_F3);
1668+
1669+
/* F4 */
1670+
if (keysym == GUAC_TERMINAL_KEY_F4 || keysym == GUAC_TERMINAL_KEY_KP_F4)
1671+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_F4);
1672+
1673+
/* F5 */
1674+
if (keysym == GUAC_TERMINAL_KEY_F5)
1675+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_F5);
1676+
1677+
/* F6 */
1678+
if (keysym == GUAC_TERMINAL_KEY_F6)
1679+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_F6);
1680+
1681+
/* F7 */
1682+
if (keysym == GUAC_TERMINAL_KEY_F7)
1683+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_F7);
1684+
1685+
/* F8 */
1686+
if (keysym == GUAC_TERMINAL_KEY_F8)
1687+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_F8);
1688+
1689+
/* F9 */
1690+
if (keysym == GUAC_TERMINAL_KEY_F9)
1691+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_F9);
16091692

1610-
if (keysym == 0xFF63 || keysym == 0xFF9E) return guac_terminal_send_string(term, "\x1B[2~"); /* Insert */
1693+
/* F10 */
1694+
if (keysym == GUAC_TERMINAL_KEY_F10)
1695+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_F10);
16111696

1612-
if (keysym == 0xFFBE || keysym == 0xFF91) return guac_terminal_send_string(term, "\x1B[[A"); /* F1 */
1613-
if (keysym == 0xFFBF || keysym == 0xFF92) return guac_terminal_send_string(term, "\x1B[[B"); /* F2 */
1614-
if (keysym == 0xFFC0 || keysym == 0xFF93) return guac_terminal_send_string(term, "\x1B[[C"); /* F3 */
1615-
if (keysym == 0xFFC1 || keysym == 0xFF94) return guac_terminal_send_string(term, "\x1B[[D"); /* F4 */
1616-
if (keysym == 0xFFC2) return guac_terminal_send_string(term, "\x1B[[E"); /* F5 */
1697+
/* F11 */
1698+
if (keysym == GUAC_TERMINAL_KEY_F11)
1699+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_F11);
16171700

1618-
if (keysym == 0xFFC3) return guac_terminal_send_string(term, "\x1B[17~"); /* F6 */
1619-
if (keysym == 0xFFC4) return guac_terminal_send_string(term, "\x1B[18~"); /* F7 */
1620-
if (keysym == 0xFFC5) return guac_terminal_send_string(term, "\x1B[19~"); /* F8 */
1621-
if (keysym == 0xFFC6) return guac_terminal_send_string(term, "\x1B[20~"); /* F9 */
1622-
if (keysym == 0xFFC7) return guac_terminal_send_string(term, "\x1B[21~"); /* F10 */
1623-
if (keysym == 0xFFC8) return guac_terminal_send_string(term, "\x1B[22~"); /* F11 */
1624-
if (keysym == 0xFFC9) return guac_terminal_send_string(term, "\x1B[23~"); /* F12 */
1701+
/* F12 */
1702+
if (keysym == GUAC_TERMINAL_KEY_F12)
1703+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_F12);
16251704

1626-
if (keysym == 0xFFFF || keysym == 0xFF9F) return guac_terminal_send_string(term, "\x1B[3~"); /* Delete */
1705+
/* Delete */
1706+
if (keysym == GUAC_TERMINAL_KEY_DELETE || keysym == GUAC_TERMINAL_KEY_KP_DELETE)
1707+
return guac_terminal_send_string(term, GUAC_TERMINAL_ESC_SEQ_DELETE);
16271708

16281709
/* Ignore unknown keys */
16291710
guac_client_log(term->client, GUAC_LOG_DEBUG,

0 commit comments

Comments
 (0)