GUACAMOLE-269: Allow backspace key to be configured.
This commit is contained in:
parent
2ace9385a2
commit
46e908c06e
@ -56,6 +56,7 @@ const char* GUAC_SSH_CLIENT_ARGS[] = {
|
|||||||
"create-recording-path",
|
"create-recording-path",
|
||||||
"read-only",
|
"read-only",
|
||||||
"server-alive-interval",
|
"server-alive-interval",
|
||||||
|
"backspace",
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -209,6 +210,13 @@ enum SSH_ARGS_IDX {
|
|||||||
*/
|
*/
|
||||||
IDX_SERVER_ALIVE_INTERVAL,
|
IDX_SERVER_ALIVE_INTERVAL,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The ASCII code, in decimal, to send for the backspace key, as configured
|
||||||
|
* by the SSH connection from the client. By default this will be 0x7f,
|
||||||
|
* the ASCII DELETE code.
|
||||||
|
*/
|
||||||
|
IDX_BACKSPACE,
|
||||||
|
|
||||||
SSH_ARGS_COUNT
|
SSH_ARGS_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -348,6 +356,11 @@ guac_ssh_settings* guac_ssh_parse_args(guac_user* user,
|
|||||||
guac_user_parse_args_int(user, GUAC_SSH_CLIENT_ARGS, argv,
|
guac_user_parse_args_int(user, GUAC_SSH_CLIENT_ARGS, argv,
|
||||||
IDX_SERVER_ALIVE_INTERVAL, 0);
|
IDX_SERVER_ALIVE_INTERVAL, 0);
|
||||||
|
|
||||||
|
/* Parse backspace key setting */
|
||||||
|
settings->backspace =
|
||||||
|
guac_user_parse_args_int(user, GUAC_SSH_CLIENT_ARGS, argv,
|
||||||
|
IDX_BACKSPACE, 127);
|
||||||
|
|
||||||
/* Parsing was successful */
|
/* Parsing was successful */
|
||||||
return settings;
|
return settings;
|
||||||
|
|
||||||
|
@ -223,6 +223,11 @@ typedef struct guac_ssh_settings {
|
|||||||
*/
|
*/
|
||||||
int server_alive_interval;
|
int server_alive_interval;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The decismal ASCII code of the command to send for backspace.
|
||||||
|
*/
|
||||||
|
int backspace;
|
||||||
|
|
||||||
} guac_ssh_settings;
|
} guac_ssh_settings;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -207,7 +207,7 @@ void* ssh_client_thread(void* data) {
|
|||||||
ssh_client->term = guac_terminal_create(client,
|
ssh_client->term = guac_terminal_create(client,
|
||||||
settings->font_name, settings->font_size,
|
settings->font_name, settings->font_size,
|
||||||
settings->resolution, settings->width, settings->height,
|
settings->resolution, settings->width, settings->height,
|
||||||
settings->color_scheme);
|
settings->color_scheme, settings->backspace);
|
||||||
|
|
||||||
/* Fail if terminal init failed */
|
/* Fail if terminal init failed */
|
||||||
if (ssh_client->term == NULL) {
|
if (ssh_client->term == NULL) {
|
||||||
|
@ -50,6 +50,7 @@ const char* GUAC_TELNET_CLIENT_ARGS[] = {
|
|||||||
"recording-include-keys",
|
"recording-include-keys",
|
||||||
"create-recording-path",
|
"create-recording-path",
|
||||||
"read-only",
|
"read-only",
|
||||||
|
"backspace",
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -174,6 +175,11 @@ enum TELNET_ARGS_IDX {
|
|||||||
*/
|
*/
|
||||||
IDX_READ_ONLY,
|
IDX_READ_ONLY,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ASCII code to use for the backspace key, or 127 if not specified.
|
||||||
|
*/
|
||||||
|
IDX_BACKSPACE,
|
||||||
|
|
||||||
TELNET_ARGS_COUNT
|
TELNET_ARGS_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -328,6 +334,11 @@ guac_telnet_settings* guac_telnet_parse_args(guac_user* user,
|
|||||||
guac_user_parse_args_boolean(user, GUAC_TELNET_CLIENT_ARGS, argv,
|
guac_user_parse_args_boolean(user, GUAC_TELNET_CLIENT_ARGS, argv,
|
||||||
IDX_CREATE_RECORDING_PATH, false);
|
IDX_CREATE_RECORDING_PATH, false);
|
||||||
|
|
||||||
|
/* Parse backspae key code */
|
||||||
|
settings->backspace =
|
||||||
|
guac_user_parse_args_int(user, GUAC_TELNET_CLIENT_ARGS, argv,
|
||||||
|
IDX_BACKSPACE, 127);
|
||||||
|
|
||||||
/* Parsing was successful */
|
/* Parsing was successful */
|
||||||
return settings;
|
return settings;
|
||||||
|
|
||||||
|
@ -207,6 +207,13 @@ typedef struct guac_telnet_settings {
|
|||||||
*/
|
*/
|
||||||
bool recording_include_keys;
|
bool recording_include_keys;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The ASCII code, in decimal, that the telnet client will use when the
|
||||||
|
* backspace key is pressed. By default, this is 0x7f, ASCII delete,
|
||||||
|
* but can be configured in the client settings.
|
||||||
|
*/
|
||||||
|
int backspace;
|
||||||
|
|
||||||
} guac_telnet_settings;
|
} guac_telnet_settings;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -480,7 +480,7 @@ void* guac_telnet_client_thread(void* data) {
|
|||||||
telnet_client->term = guac_terminal_create(client,
|
telnet_client->term = guac_terminal_create(client,
|
||||||
settings->font_name, settings->font_size,
|
settings->font_name, settings->font_size,
|
||||||
settings->resolution, settings->width, settings->height,
|
settings->resolution, settings->width, settings->height,
|
||||||
settings->color_scheme);
|
settings->color_scheme, settings->backspace);
|
||||||
|
|
||||||
/* Fail if terminal init failed */
|
/* Fail if terminal init failed */
|
||||||
if (telnet_client->term == NULL) {
|
if (telnet_client->term == NULL) {
|
||||||
|
@ -257,7 +257,8 @@ void* guac_terminal_thread(void* data) {
|
|||||||
|
|
||||||
guac_terminal* guac_terminal_create(guac_client* client,
|
guac_terminal* guac_terminal_create(guac_client* client,
|
||||||
const char* font_name, int font_size, int dpi,
|
const char* font_name, int font_size, int dpi,
|
||||||
int width, int height, const char* color_scheme) {
|
int width, int height, const char* color_scheme,
|
||||||
|
const int backspace) {
|
||||||
|
|
||||||
int default_foreground;
|
int default_foreground;
|
||||||
int default_background;
|
int default_background;
|
||||||
@ -406,6 +407,10 @@ guac_terminal* guac_terminal_create(guac_client* client,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Configure backspace */
|
||||||
|
term->backspace = backspace;
|
||||||
|
guac_client_log(client, GUAC_LOG_DEBUG, "Backspace has been set to %d", term->backspace);
|
||||||
|
|
||||||
return term;
|
return term;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -1594,7 +1599,7 @@ static int __guac_terminal_send_key(guac_terminal* term, int keysym, int pressed
|
|||||||
/* Non-printable keys */
|
/* Non-printable keys */
|
||||||
else {
|
else {
|
||||||
|
|
||||||
if (keysym == 0xFF08) return guac_terminal_send_string(term, "\x7F"); /* Backspace */
|
if (keysym == 0xFF08) return guac_terminal_send_string(term, &term->backspace); /* Backspace */
|
||||||
if (keysym == 0xFF09 || keysym == 0xFF89) return guac_terminal_send_string(term, "\x09"); /* Tab */
|
if (keysym == 0xFF09 || keysym == 0xFF89) return guac_terminal_send_string(term, "\x09"); /* Tab */
|
||||||
if (keysym == 0xFF0D || keysym == 0xFF8D) return guac_terminal_send_string(term, "\x0D"); /* Enter */
|
if (keysym == 0xFF0D || keysym == 0xFF8D) return guac_terminal_send_string(term, "\x0D"); /* Enter */
|
||||||
if (keysym == 0xFF1B) return guac_terminal_send_string(term, "\x1B"); /* Esc */
|
if (keysym == 0xFF1B) return guac_terminal_send_string(term, "\x1B"); /* Esc */
|
||||||
|
@ -432,6 +432,11 @@ struct guac_terminal {
|
|||||||
*/
|
*/
|
||||||
guac_common_clipboard* clipboard;
|
guac_common_clipboard* clipboard;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hexidecimal ASCII code sent when backspace is pressed.
|
||||||
|
*/
|
||||||
|
char backspace;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -464,13 +469,18 @@ struct guac_terminal {
|
|||||||
* invalid, a warning will be logged, and the terminal will fall back on
|
* invalid, a warning will be logged, and the terminal will fall back on
|
||||||
* GUAC_TERMINAL_SCHEME_GRAY_BLACK.
|
* GUAC_TERMINAL_SCHEME_GRAY_BLACK.
|
||||||
*
|
*
|
||||||
|
* @param backspace
|
||||||
|
* The decimal ASCII code to send when backspace is pressed in
|
||||||
|
* this terminal.
|
||||||
|
*
|
||||||
* @return
|
* @return
|
||||||
* A new guac_terminal having the given font, dimensions, and attributes
|
* A new guac_terminal having the given font, dimensions, and attributes
|
||||||
* which renders all text to the given client.
|
* which renders all text to the given client.
|
||||||
*/
|
*/
|
||||||
guac_terminal* guac_terminal_create(guac_client* client,
|
guac_terminal* guac_terminal_create(guac_client* client,
|
||||||
const char* font_name, int font_size, int dpi,
|
const char* font_name, int font_size, int dpi,
|
||||||
int width, int height, const char* color_scheme);
|
int width, int height, const char* color_scheme,
|
||||||
|
const int backspace);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Frees all resources associated with the given terminal.
|
* Frees all resources associated with the given terminal.
|
||||||
|
Loading…
Reference in New Issue
Block a user