@@ -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