mirror of
https://github.com/tio/tio.git
synced 2026-05-01 14:57:59 +02:00
Consolidated command key handling
This commit is contained in:
parent
13a8bc7790
commit
20c43dcf7c
1 changed files with 45 additions and 27 deletions
72
src/tty.c
72
src/tty.c
|
|
@ -45,6 +45,46 @@ static bool connected = false;
|
||||||
static bool tainted = false;
|
static bool tainted = false;
|
||||||
static int fd;
|
static int fd;
|
||||||
|
|
||||||
|
void handle_command_sequence(char input_char, char previous_char, char *output_char, bool *forward)
|
||||||
|
{
|
||||||
|
char unused_char;
|
||||||
|
bool unused_bool;
|
||||||
|
|
||||||
|
/* Ignore unused arguments */
|
||||||
|
if (output_char == NULL)
|
||||||
|
output_char = &unused_char;
|
||||||
|
|
||||||
|
if (forward == NULL)
|
||||||
|
forward = &unused_bool;
|
||||||
|
|
||||||
|
/* Handle escape key commands */
|
||||||
|
if (previous_char == KEY_CTRL_T)
|
||||||
|
{
|
||||||
|
switch (input_char)
|
||||||
|
{
|
||||||
|
case KEY_Q:
|
||||||
|
/* Exit upon ctrl-t q sequence */
|
||||||
|
exit(EXIT_SUCCESS);
|
||||||
|
case KEY_T:
|
||||||
|
/* Send ctrl-t key code upon ctrl-t t sequence */
|
||||||
|
*output_char = KEY_CTRL_T;
|
||||||
|
break;
|
||||||
|
case KEY_S:
|
||||||
|
/* Show tx/rx statistics upon ctrl-t s sequence */
|
||||||
|
if (tainted)
|
||||||
|
putchar('\n');
|
||||||
|
color_printf("[tio %s] Sent %ld bytes, received %ld bytes", current_time(), tx_total, rx_total);
|
||||||
|
tainted = false;
|
||||||
|
*forward = false;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
/* Ignore unknown ctrl-t escaped keys */
|
||||||
|
*forward = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void wait_for_tty_device(void)
|
void wait_for_tty_device(void)
|
||||||
{
|
{
|
||||||
fd_set rdfs;
|
fd_set rdfs;
|
||||||
|
|
@ -86,9 +126,8 @@ void wait_for_tty_device(void)
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Exit upon ctrl-t + q sequence */
|
/* Handle commands */
|
||||||
if ((input_char == KEY_Q) && (previous_char == KEY_CTRL_T))
|
handle_command_sequence(input_char, previous_char, NULL, NULL);
|
||||||
exit(EXIT_SUCCESS);
|
|
||||||
|
|
||||||
previous_char = input_char;
|
previous_char = input_char;
|
||||||
|
|
||||||
|
|
@ -267,7 +306,7 @@ int connect_tty(void)
|
||||||
}
|
}
|
||||||
if (FD_ISSET(STDIN_FILENO, &rdfs))
|
if (FD_ISSET(STDIN_FILENO, &rdfs))
|
||||||
{
|
{
|
||||||
char forward = true;
|
bool forward = true;
|
||||||
|
|
||||||
/* Input from stdin ready */
|
/* Input from stdin ready */
|
||||||
status = read(STDIN_FILENO, &input_char, 1);
|
status = read(STDIN_FILENO, &input_char, 1);
|
||||||
|
|
@ -282,29 +321,8 @@ int connect_tty(void)
|
||||||
if (input_char == KEY_CTRL_T)
|
if (input_char == KEY_CTRL_T)
|
||||||
forward = false;
|
forward = false;
|
||||||
|
|
||||||
/* Handle escape key commands */
|
/* Handle commands */
|
||||||
if (previous_char == KEY_CTRL_T)
|
handle_command_sequence(input_char, previous_char, &output_char, &forward);
|
||||||
{
|
|
||||||
switch (input_char)
|
|
||||||
{
|
|
||||||
case KEY_Q:
|
|
||||||
/* Exit upon ctrl-t q sequence */
|
|
||||||
exit(EXIT_SUCCESS);
|
|
||||||
case KEY_T:
|
|
||||||
/* Send ctrl-t key code upon ctrl-t t sequence */
|
|
||||||
output_char = KEY_CTRL_T;
|
|
||||||
break;
|
|
||||||
case KEY_S:
|
|
||||||
/* Show tx/rx statistics upon ctrl-t s sequence */
|
|
||||||
color_printf("[tio %s] Sent %ld bytes, received %ld bytes", current_time(), tx_total, rx_total);
|
|
||||||
forward = false;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
/* Ignore unknown ctrl-t escaped keys */
|
|
||||||
forward = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (forward)
|
if (forward)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue