Skip to content

Commit

Permalink
GUACAMOLE-1943: Add ctrl+arrows/backspace/del and shift+up/down/home/…
Browse files Browse the repository at this point in the history
…end keyboard shortcuts.
  • Loading branch information
corentin-soriano committed Oct 6, 2024
1 parent 783f4c5 commit 9dff124
Showing 1 changed file with 41 additions and 1 deletion.
42 changes: 41 additions & 1 deletion src/terminal/terminal.c
Original file line number Diff line number Diff line change
Expand Up @@ -1460,9 +1460,21 @@ static int __guac_terminal_send_key(guac_terminal* term, int keysym, int pressed
if ((keysym == 'C' && term->mod_ctrl) || (keysym == 'c' && term->mod_meta))
return 0;

/* Shift+PgUp / Shift+PgDown shortcuts for scrolling */
/* Shortcuts for scrolling history with shift */
if (term->mod_shift) {

/* Home */
if (keysym == 0xFF50 || keysym == 0xFF95) {
guac_terminal_scroll_display_up(term, term->max_scrollback);
return 0;
}

/* End */
if (keysym == 0xFF57 || keysym == 0xFF9C) {
guac_terminal_scroll_display_down(term, term->max_scrollback);
return 0;
}

/* Page up */
if (keysym == 0xFF55) {
guac_terminal_scroll_display_up(term, term->term_height);
Expand All @@ -1475,6 +1487,18 @@ static int __guac_terminal_send_key(guac_terminal* term, int keysym, int pressed
return 0;
}

/* Up */
if (keysym == 0xFF52 || keysym == 0xFF97) {
guac_terminal_scroll_display_up(term, 1);
return 0;
}

/* Down */
if (keysym == 0xFF54 || keysym == 0xFF99) {
guac_terminal_scroll_display_down(term, 1);
return 0;
}

}

/* Reset scroll */
Expand Down Expand Up @@ -1510,6 +1534,22 @@ static int __guac_terminal_send_key(guac_terminal* term, int keysym, int pressed
else if (keysym >= '3' && keysym <= '7')
data = (char) (keysym - '3' + 0x1B);

/* CTRL+Left: return to previous word */
else if (keysym == 0xFF51 || keysym == 0xFF96)
return guac_terminal_send_string(term, "\033[1;5D");

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

/* CTRL+Backspace: remove word (map to CTRL+w) */
else if (keysym == 0xFF08)
data = (char) 23;

/* CTRL+Supr: remove word to right */
else if (keysym == 0xFFFF)
return guac_terminal_send_string(term, "\033D");

/* Otherwise ignore */
else
return 0;
Expand Down

0 comments on commit 9dff124

Please sign in to comment.