mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-18 22:05:25 -05:00
vt: remove almost all abort() calls
Replace with generic error log messages that simply says the ESC/CSI/OSC sequence is unhandled. This can mean either invalid or unimplemented, depending on the context.
This commit is contained in:
parent
84f868f88d
commit
8acc3b891d
3 changed files with 49 additions and 83 deletions
97
csi.c
97
csi.c
|
|
@ -20,6 +20,9 @@
|
|||
|
||||
static uint32_t colors256[256];
|
||||
|
||||
#define UNHANDLED() LOG_ERR("unhandled: %s", csi_as_string(term, final))
|
||||
#define UNHANDLED_SGR() LOG_ERR("unhandled: %s", csi_as_string(term, 'm'))
|
||||
|
||||
static void __attribute__((constructor))
|
||||
initialize_colors256(void)
|
||||
{
|
||||
|
|
@ -169,16 +172,13 @@ csi_sgr(struct terminal *term)
|
|||
/* 7 - color space associated with tolerance */
|
||||
|
||||
term->vt.attrs.foreground = 1 << 30 | r << 16 | g << 8 | b;
|
||||
} else {
|
||||
LOG_ERR("invalid CSI SGR sequence");
|
||||
abort();
|
||||
}
|
||||
} else
|
||||
UNHANDLED_SGR();
|
||||
}
|
||||
|
||||
else {
|
||||
LOG_ERR("invalid CSI SGR sequence");
|
||||
abort();
|
||||
}
|
||||
else
|
||||
UNHANDLED_SGR();
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -239,17 +239,13 @@ csi_sgr(struct terminal *term)
|
|||
/* 7 - color space associated with tolerance */
|
||||
|
||||
term->vt.attrs.background = 1 << 30 | r << 16 | g << 8 | b;
|
||||
} else {
|
||||
LOG_ERR("invalid CSI SGR sequence");
|
||||
abort();
|
||||
}
|
||||
} else
|
||||
UNHANDLED_SGR();
|
||||
}
|
||||
|
||||
else {
|
||||
LOG_ERR("invalid CSI SGR sequence");
|
||||
abort();
|
||||
break;
|
||||
}
|
||||
else
|
||||
UNHANDLED_SGR();
|
||||
|
||||
break;
|
||||
}
|
||||
case 49:
|
||||
|
|
@ -281,8 +277,7 @@ csi_sgr(struct terminal *term)
|
|||
break;
|
||||
|
||||
default:
|
||||
LOG_ERR("unimplemented: CSI: SGR: %u", term->vt.params.v[i].value);
|
||||
abort();
|
||||
UNHANDLED_SGR();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -392,9 +387,7 @@ csi_dispatch(struct terminal *term, uint8_t final)
|
|||
}
|
||||
|
||||
default:
|
||||
LOG_ERR("%s: invalid argument: %d",
|
||||
csi_as_string(term, final), param);
|
||||
abort();
|
||||
UNHANDLED();
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
|
@ -428,9 +421,7 @@ csi_dispatch(struct terminal *term, uint8_t final)
|
|||
break;
|
||||
|
||||
default:
|
||||
LOG_ERR("%s: invalid argument: %d",
|
||||
csi_as_string(term, final), param);
|
||||
abort();
|
||||
UNHANDLED();
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -644,21 +635,17 @@ csi_dispatch(struct terminal *term, uint8_t final)
|
|||
}
|
||||
|
||||
default:
|
||||
LOG_ERR("unimplemented: %s, parameter = %d",
|
||||
csi_as_string(term, final), param);
|
||||
abort();
|
||||
UNHANDLED();
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
LOG_ERR("%s: missing parameter", csi_as_string(term, final));
|
||||
abort();
|
||||
}
|
||||
} else
|
||||
UNHANDLED();
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
LOG_ERR("unimplemented: %s", csi_as_string(term, final));
|
||||
abort();
|
||||
UNHANDLED();
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -747,10 +734,7 @@ csi_dispatch(struct terminal *term, uint8_t final)
|
|||
break;
|
||||
|
||||
default:
|
||||
LOG_ERR("%s: unimplemented param: %d",
|
||||
csi_as_string(term, final),
|
||||
term->vt.params.v[i].value);
|
||||
abort();
|
||||
UNHANDLED();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -831,10 +815,7 @@ csi_dispatch(struct terminal *term, uint8_t final)
|
|||
break;
|
||||
|
||||
default:
|
||||
LOG_ERR("%s: unimplemented param: %d",
|
||||
csi_as_string(term, final),
|
||||
term->vt.params.v[i].value);
|
||||
abort();
|
||||
UNHANDLED();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -843,8 +824,8 @@ csi_dispatch(struct terminal *term, uint8_t final)
|
|||
|
||||
case 'p': {
|
||||
if (term->vt.private[1] != '$') {
|
||||
LOG_ERR("unimplemented: %s", csi_as_string(term, final));
|
||||
abort();
|
||||
UNHANDLED();
|
||||
break;
|
||||
}
|
||||
|
||||
unsigned param = vt_param_get(term, 0, 0);
|
||||
|
|
@ -874,8 +855,7 @@ csi_dispatch(struct terminal *term, uint8_t final)
|
|||
break;
|
||||
|
||||
default:
|
||||
LOG_ERR("unimplemented: %s", csi_as_string(term, final));
|
||||
abort();
|
||||
UNHANDLED();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -891,15 +871,15 @@ csi_dispatch(struct terminal *term, uint8_t final)
|
|||
break;
|
||||
|
||||
default:
|
||||
LOG_ERR("unimplemented: CSI %s", csi_as_string(term, final));
|
||||
abort();
|
||||
UNHANDLED();
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
LOG_ERR("unimplemented: %s", csi_as_string(term, final));
|
||||
abort();
|
||||
UNHANDLED();
|
||||
break;
|
||||
}
|
||||
|
||||
break; /* private == '?' */
|
||||
|
|
@ -910,10 +890,7 @@ csi_dispatch(struct terminal *term, uint8_t final)
|
|||
case 'c': {
|
||||
int param = vt_param_get(term, 0, 0);
|
||||
if (param != 0) {
|
||||
LOG_ERR(
|
||||
"unimplemented: send device attributes with param = %d",
|
||||
param);
|
||||
abort();
|
||||
UNHANDLED();
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -945,8 +922,7 @@ csi_dispatch(struct terminal *term, uint8_t final)
|
|||
break; /* final == 'm' */
|
||||
|
||||
default:
|
||||
LOG_ERR("unimplemented: %s", csi_as_string(term, final));
|
||||
abort();
|
||||
UNHANDLED();
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -984,8 +960,7 @@ csi_dispatch(struct terminal *term, uint8_t final)
|
|||
}
|
||||
|
||||
default:
|
||||
LOG_ERR("unimplemented: %s", csi_as_string(term, final));
|
||||
abort();
|
||||
UNHANDLED();
|
||||
break;
|
||||
}
|
||||
break; /* private == ' ' */
|
||||
|
|
@ -998,16 +973,14 @@ csi_dispatch(struct terminal *term, uint8_t final)
|
|||
break;
|
||||
|
||||
default:
|
||||
LOG_ERR("unimplemented: %s", csi_as_string(term, final));
|
||||
abort();
|
||||
UNHANDLED();
|
||||
break;
|
||||
}
|
||||
break; /* private == '!' */
|
||||
}
|
||||
|
||||
default:
|
||||
LOG_ERR("unimplemented: %s", csi_as_string(term, final));
|
||||
abort();
|
||||
UNHANDLED();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
20
osc.c
20
osc.c
|
|
@ -14,6 +14,8 @@
|
|||
#include "terminal.h"
|
||||
#include "vt.h"
|
||||
|
||||
#define UNHANDLED() LOG_ERR("unhandled: OSC: %.*s", (int)term->vt.osc.idx, term->vt.osc.data)
|
||||
|
||||
static void
|
||||
osc_query(struct terminal *term, unsigned param)
|
||||
{
|
||||
|
|
@ -39,9 +41,7 @@ osc_query(struct terminal *term, unsigned param)
|
|||
}
|
||||
|
||||
default:
|
||||
LOG_ERR("unimplemented: OSC query: %.*s",
|
||||
(int)term->vt.osc.idx, term->vt.osc.data);
|
||||
abort();
|
||||
UNHANDLED();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -55,8 +55,6 @@ osc_to_clipboard(struct terminal *term, const char *target,
|
|||
|
||||
if (decoded == NULL) {
|
||||
LOG_WARN("OSC: invalid clipboard data: %s", base64_data);
|
||||
/* TODO: clear selection */
|
||||
abort();
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -235,14 +233,14 @@ osc_dispatch(struct terminal *term)
|
|||
}
|
||||
|
||||
if (!isdigit(c)) {
|
||||
LOG_ERR("OSC: invalid parameter: %.*s",
|
||||
(int)term->vt.osc.idx, term->vt.osc.data);
|
||||
abort();
|
||||
UNHANDLED();
|
||||
return;
|
||||
}
|
||||
|
||||
param *= 10;
|
||||
param += c - '0';
|
||||
}
|
||||
|
||||
LOG_DBG("OCS: %.*s (param = %d)",
|
||||
(int)term->vt.osc.idx, term->vt.osc.data, param);
|
||||
|
||||
|
|
@ -260,7 +258,7 @@ osc_dispatch(struct terminal *term)
|
|||
|
||||
case 30: /* Set tab title */
|
||||
break;
|
||||
|
||||
|
||||
case 52: /* Copy to/from clipboard/primary */
|
||||
osc_selection(term, string);
|
||||
break;
|
||||
|
|
@ -275,9 +273,7 @@ osc_dispatch(struct terminal *term)
|
|||
break;
|
||||
|
||||
default:
|
||||
LOG_ERR("unimplemented: OSC: %.*s",
|
||||
(int)term->vt.osc.idx, term->vt.osc.data);
|
||||
abort();
|
||||
UNHANDLED();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
15
vt.c
15
vt.c
|
|
@ -12,6 +12,8 @@
|
|||
#include "grid.h"
|
||||
#include "osc.h"
|
||||
|
||||
#define UNHANDLED() LOG_ERR("unhandled: %s", esc_as_string(term, final))
|
||||
|
||||
/* https://vt100.net/emu/dec_ansi_parser */
|
||||
|
||||
enum state {
|
||||
|
|
@ -613,8 +615,7 @@ esc_dispatch(struct terminal *term, uint8_t final)
|
|||
case '+': term->charset[3] = CHARSET_ASCII; break;
|
||||
|
||||
default:
|
||||
LOG_ERR("%s: invalid charset identifier", esc_as_string(term, final));
|
||||
abort();
|
||||
UNHANDLED();
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
|
@ -658,8 +659,7 @@ esc_dispatch(struct terminal *term, uint8_t final)
|
|||
case '+': term->charset[3] = CHARSET_GRAPHIC; break;
|
||||
|
||||
default:
|
||||
LOG_ERR("%s: invalid charset identifier", esc_as_string(term, final));
|
||||
abort();
|
||||
UNHANDLED();
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
|
@ -674,8 +674,7 @@ esc_dispatch(struct terminal *term, uint8_t final)
|
|||
break;
|
||||
|
||||
default:
|
||||
LOG_ERR("unimplemented: ESC: %s", esc_as_string(term, final));
|
||||
abort();
|
||||
UNHANDLED();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -888,10 +887,8 @@ action(struct terminal *term, enum action _action, uint8_t c)
|
|||
term->vt.private[0] = c;
|
||||
else if (term->vt.private[1] == 0)
|
||||
term->vt.private[1] = c;
|
||||
else {
|
||||
else
|
||||
LOG_ERR("only two private/intermediate characters supported");
|
||||
abort();
|
||||
}
|
||||
break;
|
||||
|
||||
case ACTION_ESC_DISPATCH:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue