vte: move long csi-handlers into separate function
Avoid making do_csi() too big. So put long csi-handlers into separate functions. Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This commit is contained in:
parent
2ad5600d60
commit
30c1c20876
152
src/vte.c
152
src/vte.c
@ -489,66 +489,10 @@ static void do_esc(struct kmscon_vte *vte, uint32_t data)
|
||||
}
|
||||
}
|
||||
|
||||
static void csi_soft_reset(struct kmscon_vte *vte)
|
||||
static void csi_attribute(struct kmscon_vte *vte)
|
||||
{
|
||||
kmscon_vte_reset(vte);
|
||||
}
|
||||
unsigned int i;
|
||||
|
||||
static void do_csi(struct kmscon_vte *vte, uint32_t data)
|
||||
{
|
||||
int num, i;
|
||||
|
||||
if (vte->csi_argc < CSI_ARG_MAX)
|
||||
vte->csi_argc++;
|
||||
|
||||
switch (data) {
|
||||
case 'A':
|
||||
num = vte->csi_argv[0];
|
||||
if (num <= 0)
|
||||
num = 1;
|
||||
kmscon_console_move_up(vte->con, num, false);
|
||||
break;
|
||||
case 'B':
|
||||
num = vte->csi_argv[0];
|
||||
if (num <= 0)
|
||||
num = 1;
|
||||
kmscon_console_move_down(vte->con, num, false);
|
||||
break;
|
||||
case 'C':
|
||||
num = vte->csi_argv[0];
|
||||
if (num <= 0)
|
||||
num = 1;
|
||||
kmscon_console_move_right(vte->con, num);
|
||||
break;
|
||||
case 'D':
|
||||
num = vte->csi_argv[0];
|
||||
if (num <= 0)
|
||||
num = 1;
|
||||
kmscon_console_move_left(vte->con, num);
|
||||
break;
|
||||
case 'J':
|
||||
if (vte->csi_argv[0] <= 0)
|
||||
kmscon_console_erase_cursor_to_screen(vte->con);
|
||||
else if (vte->csi_argv[0] == 1)
|
||||
kmscon_console_erase_screen_to_cursor(vte->con);
|
||||
else if (vte->csi_argv[0] == 2)
|
||||
kmscon_console_erase_screen(vte->con);
|
||||
else
|
||||
log_debug("unknown parameter to CSI-J: %d",
|
||||
vte->csi_argv[0]);
|
||||
break;
|
||||
case 'K':
|
||||
if (vte->csi_argv[0] <= 0)
|
||||
kmscon_console_erase_cursor_to_end(vte->con);
|
||||
else if (vte->csi_argv[0] == 1)
|
||||
kmscon_console_erase_home_to_cursor(vte->con);
|
||||
else if (vte->csi_argv[0] == 2)
|
||||
kmscon_console_erase_current_line(vte->con);
|
||||
else
|
||||
log_debug("unknown parameter to CSI-K: %d",
|
||||
vte->csi_argv[0]);
|
||||
break;
|
||||
case 'm':
|
||||
for (i = 0; i < CSI_ARG_MAX; ++i) {
|
||||
switch (vte->csi_argv[i]) {
|
||||
case -1:
|
||||
@ -627,18 +571,15 @@ static void do_csi(struct kmscon_vte *vte, uint32_t data)
|
||||
vte->csi_argv[i]);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'p':
|
||||
if (vte->csi_flags & CSI_GT) {
|
||||
/* xterm: select X11 visual cursor mode */
|
||||
} else if (vte->csi_flags & CSI_BANG) {
|
||||
/* DECSTR: Soft Reset */
|
||||
csi_soft_reset(vte);
|
||||
} else if (vte->csi_flags & CSI_CASH) {
|
||||
/* DECRQM: Request DEC Private Mode */
|
||||
/* If CSI_WHAT is set, then enable,
|
||||
* otherwise disable */
|
||||
} else {
|
||||
}
|
||||
|
||||
static void csi_soft_reset(struct kmscon_vte *vte)
|
||||
{
|
||||
kmscon_vte_reset(vte);
|
||||
}
|
||||
|
||||
static void csi_compat_mode(struct kmscon_vte *vte)
|
||||
{
|
||||
/* DECSCL: Compatibility Level */
|
||||
/* Sometimes CSI_DQUOTE is set here, too */
|
||||
if (vte->csi_argv[0] == 61) {
|
||||
@ -682,6 +623,77 @@ static void do_csi(struct kmscon_vte *vte, uint32_t data)
|
||||
vte->flags &= ~(FLAG_8BIT_MODE | FLAG_7BIT_MODE);
|
||||
kmscon_utf8_mach_reset(vte->mach);
|
||||
}
|
||||
}
|
||||
|
||||
static void do_csi(struct kmscon_vte *vte, uint32_t data)
|
||||
{
|
||||
int num;
|
||||
|
||||
if (vte->csi_argc < CSI_ARG_MAX)
|
||||
vte->csi_argc++;
|
||||
|
||||
switch (data) {
|
||||
case 'A':
|
||||
num = vte->csi_argv[0];
|
||||
if (num <= 0)
|
||||
num = 1;
|
||||
kmscon_console_move_up(vte->con, num, false);
|
||||
break;
|
||||
case 'B':
|
||||
num = vte->csi_argv[0];
|
||||
if (num <= 0)
|
||||
num = 1;
|
||||
kmscon_console_move_down(vte->con, num, false);
|
||||
break;
|
||||
case 'C':
|
||||
num = vte->csi_argv[0];
|
||||
if (num <= 0)
|
||||
num = 1;
|
||||
kmscon_console_move_right(vte->con, num);
|
||||
break;
|
||||
case 'D':
|
||||
num = vte->csi_argv[0];
|
||||
if (num <= 0)
|
||||
num = 1;
|
||||
kmscon_console_move_left(vte->con, num);
|
||||
break;
|
||||
case 'J':
|
||||
if (vte->csi_argv[0] <= 0)
|
||||
kmscon_console_erase_cursor_to_screen(vte->con);
|
||||
else if (vte->csi_argv[0] == 1)
|
||||
kmscon_console_erase_screen_to_cursor(vte->con);
|
||||
else if (vte->csi_argv[0] == 2)
|
||||
kmscon_console_erase_screen(vte->con);
|
||||
else
|
||||
log_debug("unknown parameter to CSI-J: %d",
|
||||
vte->csi_argv[0]);
|
||||
break;
|
||||
case 'K':
|
||||
if (vte->csi_argv[0] <= 0)
|
||||
kmscon_console_erase_cursor_to_end(vte->con);
|
||||
else if (vte->csi_argv[0] == 1)
|
||||
kmscon_console_erase_home_to_cursor(vte->con);
|
||||
else if (vte->csi_argv[0] == 2)
|
||||
kmscon_console_erase_current_line(vte->con);
|
||||
else
|
||||
log_debug("unknown parameter to CSI-K: %d",
|
||||
vte->csi_argv[0]);
|
||||
break;
|
||||
case 'm':
|
||||
csi_attribute(vte);
|
||||
break;
|
||||
case 'p':
|
||||
if (vte->csi_flags & CSI_GT) {
|
||||
/* xterm: select X11 visual cursor mode */
|
||||
} else if (vte->csi_flags & CSI_BANG) {
|
||||
/* DECSTR: Soft Reset */
|
||||
csi_soft_reset(vte);
|
||||
} else if (vte->csi_flags & CSI_CASH) {
|
||||
/* DECRQM: Request DEC Private Mode */
|
||||
/* If CSI_WHAT is set, then enable,
|
||||
* otherwise disable */
|
||||
} else {
|
||||
csi_compat_mode(vte);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
Loading…
x
Reference in New Issue
Block a user