Discard Device Control Strings and Operating System Commands.
These strings often contain things like: - Window titles. - Extended key map functionality. - Color palette switching. We could look at these features in the future (if people consider them to be important enough), but we'd better discard them now. This fixes some artifacts people reported when using TERM=xterm. Reported by: des@, Paul B. Mahol
This commit is contained in:
parent
3fa0694aaa
commit
4a11e7f142
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=197853
@ -88,6 +88,7 @@ ICH Insert character ^[ [ @ n
|
|||||||
IL Insert line ^[ [ L n
|
IL Insert line ^[ [ L n
|
||||||
IND Index ^[ D
|
IND Index ^[ D
|
||||||
NEL Next line ^[ E
|
NEL Next line ^[ E
|
||||||
|
OSC Operating System Command ^[ ]
|
||||||
RI Reverse index ^[ M
|
RI Reverse index ^[ M
|
||||||
RIS Reset to Initial State ^[ c
|
RIS Reset to Initial State ^[ c
|
||||||
RM Reset Mode ^[ [ l r
|
RM Reset Mode ^[ [ l r
|
||||||
|
@ -56,6 +56,7 @@ static FILE *df;
|
|||||||
#define TS_WRAPPED 0x10 /* Next character should be printed on col 0. */
|
#define TS_WRAPPED 0x10 /* Next character should be printed on col 0. */
|
||||||
#define TS_8BIT 0x20 /* UTF-8 disabled. */
|
#define TS_8BIT 0x20 /* UTF-8 disabled. */
|
||||||
#define TS_CONS25 0x40 /* cons25 emulation. */
|
#define TS_CONS25 0x40 /* cons25 emulation. */
|
||||||
|
#define TS_INSTRING 0x80 /* Inside string. */
|
||||||
|
|
||||||
/* Character that blanks a cell. */
|
/* Character that blanks a cell. */
|
||||||
#define BLANK ' '
|
#define BLANK ' '
|
||||||
@ -176,6 +177,24 @@ static void
|
|||||||
teken_input_char(teken_t *t, teken_char_t c)
|
teken_input_char(teken_t *t, teken_char_t c)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
/*
|
||||||
|
* There is no support for DCS and OSC. Just discard strings
|
||||||
|
* until we receive characters that may indicate string
|
||||||
|
* termination.
|
||||||
|
*/
|
||||||
|
if (t->t_stateflags & TS_INSTRING) {
|
||||||
|
switch (c) {
|
||||||
|
case '\x1B':
|
||||||
|
t->t_stateflags &= ~TS_INSTRING;
|
||||||
|
break;
|
||||||
|
case '\a':
|
||||||
|
t->t_stateflags &= ~TS_INSTRING;
|
||||||
|
return;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
switch (c) {
|
switch (c) {
|
||||||
case '\0':
|
case '\0':
|
||||||
break;
|
break;
|
||||||
|
@ -425,10 +425,11 @@ teken_subr_delete_line(teken_t *t, unsigned int nrows)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
teken_subr_device_control_string(teken_t *t __unused)
|
teken_subr_device_control_string(teken_t *t)
|
||||||
{
|
{
|
||||||
|
|
||||||
teken_printf("device control string???\n");
|
teken_printf("Unsupported device control string\n");
|
||||||
|
t->t_stateflags |= TS_INSTRING;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -743,6 +744,14 @@ teken_subr_next_line(teken_t *t)
|
|||||||
teken_subr_newline(t);
|
teken_subr_newline(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
teken_subr_operating_system_command(teken_t *t)
|
||||||
|
{
|
||||||
|
|
||||||
|
teken_printf("Unsupported operating system command\n");
|
||||||
|
t->t_stateflags |= TS_INSTRING;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
teken_subr_pan_down(teken_t *t, unsigned int nrows)
|
teken_subr_pan_down(teken_t *t, unsigned int nrows)
|
||||||
{
|
{
|
||||||
@ -1258,7 +1267,10 @@ static void
|
|||||||
teken_subr_string_terminator(teken_t *t __unused)
|
teken_subr_string_terminator(teken_t *t __unused)
|
||||||
{
|
{
|
||||||
|
|
||||||
teken_printf("string terminator???\n");
|
/*
|
||||||
|
* Strings are already terminated in teken_input_char() when ^[
|
||||||
|
* is inserted.
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
Loading…
Reference in New Issue
Block a user