mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-03-24 09:05:48 -04:00
terminal: only support a single intermediate/private character
This commit is contained in:
parent
43e57e3546
commit
96bd55f7c4
3 changed files with 24 additions and 21 deletions
24
csi.c
24
csi.c
|
|
@ -255,8 +255,8 @@ csi_as_string(struct terminal *term, uint8_t final)
|
||||||
static char msg[1024];
|
static char msg[1024];
|
||||||
int c = snprintf(msg, sizeof(msg), "CSI: ");
|
int c = snprintf(msg, sizeof(msg), "CSI: ");
|
||||||
|
|
||||||
for (size_t i = 0; i < term->vt.intermediates.idx; i++)
|
if (term->vt.private != 0)
|
||||||
c += snprintf(&msg[c], sizeof(msg) - c, "%c", term->vt.intermediates.data[i]);
|
c += snprintf(&msg[c], sizeof(msg) - c, "%c", term->vt.private);
|
||||||
|
|
||||||
for (size_t i = 0; i < term->vt.params.idx; i++){
|
for (size_t i = 0; i < term->vt.params.idx; i++){
|
||||||
c += snprintf(&msg[c], sizeof(msg) - c, "%d",
|
c += snprintf(&msg[c], sizeof(msg) - c, "%d",
|
||||||
|
|
@ -281,7 +281,8 @@ csi_dispatch(struct terminal *term, uint8_t final)
|
||||||
{
|
{
|
||||||
LOG_DBG("%s", csi_as_string(term, final));
|
LOG_DBG("%s", csi_as_string(term, final));
|
||||||
|
|
||||||
if (term->vt.intermediates.idx == 0) {
|
switch (term->vt.private) {
|
||||||
|
case 0: {
|
||||||
switch (final) {
|
switch (final) {
|
||||||
case 'c':
|
case 'c':
|
||||||
write(term->ptmx, "\033[?6c", 5);
|
write(term->ptmx, "\033[?6c", 5);
|
||||||
|
|
@ -577,12 +578,13 @@ csi_dispatch(struct terminal *term, uint8_t final)
|
||||||
default:
|
default:
|
||||||
LOG_ERR("unimplemented: %s", csi_as_string(term, final));
|
LOG_ERR("unimplemented: %s", csi_as_string(term, final));
|
||||||
abort();
|
abort();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
break; /* private == 0 */
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (term->vt.intermediates.idx == 1 &&
|
case '?': {
|
||||||
term->vt.intermediates.data[0] == '?') {
|
|
||||||
|
|
||||||
switch (final) {
|
switch (final) {
|
||||||
case 'h': {
|
case 'h': {
|
||||||
for (size_t i = 0; i < term->vt.params.idx; i++) {
|
for (size_t i = 0; i < term->vt.params.idx; i++) {
|
||||||
|
|
@ -761,10 +763,11 @@ csi_dispatch(struct terminal *term, uint8_t final)
|
||||||
LOG_ERR("unimplemented: %s", csi_as_string(term, final));
|
LOG_ERR("unimplemented: %s", csi_as_string(term, final));
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
break; /* private == '?' */
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (term->vt.intermediates.idx == 1 &&
|
case '>': {
|
||||||
term->vt.intermediates.data[0] == '>') {
|
|
||||||
switch (final) {
|
switch (final) {
|
||||||
case 'c': {
|
case 'c': {
|
||||||
int param = param_get(term, 0, 0);
|
int param = param_get(term, 0, 0);
|
||||||
|
|
@ -784,10 +787,13 @@ csi_dispatch(struct terminal *term, uint8_t final)
|
||||||
LOG_ERR("unimplemented: %s", csi_as_string(term, final));
|
LOG_ERR("unimplemented: %s", csi_as_string(term, final));
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
break; /* private == '>' */
|
||||||
}
|
}
|
||||||
|
|
||||||
else {
|
default:
|
||||||
LOG_ERR("unimplemented: %s", csi_as_string(term, final));
|
LOG_ERR("unimplemented: %s", csi_as_string(term, final));
|
||||||
abort();
|
abort();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -125,10 +125,7 @@ struct vt {
|
||||||
struct vt_param v[16];
|
struct vt_param v[16];
|
||||||
size_t idx;
|
size_t idx;
|
||||||
} params;
|
} params;
|
||||||
struct {
|
char private;
|
||||||
uint8_t data[2];
|
|
||||||
size_t idx;
|
|
||||||
} intermediates;
|
|
||||||
struct {
|
struct {
|
||||||
uint8_t data[1024];
|
uint8_t data[1024];
|
||||||
size_t idx;
|
size_t idx;
|
||||||
|
|
|
||||||
16
vt.c
16
vt.c
|
|
@ -573,8 +573,8 @@ esc_as_string(struct terminal *term, uint8_t final)
|
||||||
static char msg[1024];
|
static char msg[1024];
|
||||||
int c = snprintf(msg, sizeof(msg), "\E");
|
int c = snprintf(msg, sizeof(msg), "\E");
|
||||||
|
|
||||||
for (size_t i = 0; i < term->vt.intermediates.idx; i++)
|
if (term->vt.private != 0)
|
||||||
c += snprintf(&msg[c], sizeof(msg) - c, "%c", term->vt.intermediates.data[i]);
|
c += snprintf(&msg[c], sizeof(msg) - c, "%c", term->vt.private);
|
||||||
|
|
||||||
c += snprintf(&msg[c], sizeof(msg) - c, "%c", final);
|
c += snprintf(&msg[c], sizeof(msg) - c, "%c", final);
|
||||||
return msg;
|
return msg;
|
||||||
|
|
@ -815,7 +815,7 @@ action(struct terminal *term, enum action _action, uint8_t c)
|
||||||
|
|
||||||
case ACTION_CLEAR:
|
case ACTION_CLEAR:
|
||||||
memset(&term->vt.params, 0, sizeof(term->vt.params));
|
memset(&term->vt.params, 0, sizeof(term->vt.params));
|
||||||
term->vt.intermediates.idx = 0;
|
term->vt.private = 0;
|
||||||
term->vt.osc.idx = 0;
|
term->vt.osc.idx = 0;
|
||||||
term->vt.utf8.idx = 0;
|
term->vt.utf8.idx = 0;
|
||||||
break;
|
break;
|
||||||
|
|
@ -853,11 +853,11 @@ action(struct terminal *term, enum action _action, uint8_t c)
|
||||||
|
|
||||||
case ACTION_COLLECT:
|
case ACTION_COLLECT:
|
||||||
LOG_DBG("collect");
|
LOG_DBG("collect");
|
||||||
term->vt.intermediates.data[term->vt.intermediates.idx++] = c;
|
if (term->vt.private != 0) {
|
||||||
break;
|
LOG_ERR("only one private/intermediate characters supported");
|
||||||
|
abort();
|
||||||
LOG_ERR("unimplemented: action ESC dispatch");
|
}
|
||||||
abort();
|
term->vt.private = c;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ACTION_ESC_DISPATCH:
|
case ACTION_ESC_DISPATCH:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue