When dumping commands dump stop_pending_mode at the correct place
This commit is contained in:
parent
38ae370202
commit
1ef895e246
@ -1382,7 +1382,7 @@ pending_dcs(Screen *screen, PyObject *dump_callback DUMP_UNUSED) {
|
|||||||
REPORT_COMMAND(screen_start_pending_mode);
|
REPORT_COMMAND(screen_start_pending_mode);
|
||||||
screen->pending_mode.activated_at = monotonic();
|
screen->pending_mode.activated_at = monotonic();
|
||||||
} else {
|
} else {
|
||||||
REPORT_COMMAND(screen_stop_pending_mode);
|
screen->pending_mode.stop_escape_code_type = DCS;
|
||||||
screen->pending_mode.activated_at = 0;
|
screen->pending_mode.activated_at = 0;
|
||||||
}
|
}
|
||||||
} else pending_escape_code(screen, DCS, ST);
|
} else pending_escape_code(screen, DCS, ST);
|
||||||
@ -1395,8 +1395,8 @@ pending_csi(Screen *screen, PyObject *dump_callback DUMP_UNUSED) {
|
|||||||
REPORT_COMMAND(screen_set_mode, 2026, 1);
|
REPORT_COMMAND(screen_set_mode, 2026, 1);
|
||||||
screen->pending_mode.activated_at = monotonic();
|
screen->pending_mode.activated_at = monotonic();
|
||||||
} else {
|
} else {
|
||||||
REPORT_COMMAND(screen_reset_mode, 2026, 1);
|
|
||||||
screen->pending_mode.activated_at = 0;
|
screen->pending_mode.activated_at = 0;
|
||||||
|
screen->pending_mode.stop_escape_code_type = CSI;
|
||||||
}
|
}
|
||||||
} else pending_escape_code(screen, CSI, pb(screen->parser_buf_pos));
|
} else pending_escape_code(screen, CSI, pb(screen->parser_buf_pos));
|
||||||
}
|
}
|
||||||
@ -1456,6 +1456,11 @@ do_parse_bytes(Screen *screen, const uint8_t *read_buf, const size_t read_buf_sz
|
|||||||
_parse_bytes(screen, screen->pending_mode.buf, screen->pending_mode.used, dump_callback);
|
_parse_bytes(screen, screen->pending_mode.buf, screen->pending_mode.used, dump_callback);
|
||||||
screen->pending_mode.used = 0;
|
screen->pending_mode.used = 0;
|
||||||
screen->pending_mode.activated_at = 0; // ignore any pending starts in the pending bytes
|
screen->pending_mode.activated_at = 0; // ignore any pending starts in the pending bytes
|
||||||
|
if (screen->pending_mode.stop_escape_code_type) {
|
||||||
|
if (screen->pending_mode.stop_escape_code_type == DCS) { REPORT_COMMAND(screen_stop_pending_mode); }
|
||||||
|
else if (screen->pending_mode.stop_escape_code_type == CSI) { REPORT_COMMAND(screen_reset_mode, 2026, 1); }
|
||||||
|
screen->pending_mode.stop_escape_code_type = 0;
|
||||||
|
}
|
||||||
state = START;
|
state = START;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -1467,6 +1472,7 @@ do_parse_bytes(Screen *screen, const uint8_t *read_buf, const size_t read_buf_sz
|
|||||||
|
|
||||||
case QUEUE_PENDING: {
|
case QUEUE_PENDING: {
|
||||||
const size_t needed_space = read_buf_sz * 2;
|
const size_t needed_space = read_buf_sz * 2;
|
||||||
|
screen->pending_mode.stop_escape_code_type = 0;
|
||||||
if (screen->pending_mode.capacity - screen->pending_mode.used < needed_space) {
|
if (screen->pending_mode.capacity - screen->pending_mode.used < needed_space) {
|
||||||
if (screen->pending_mode.capacity >= READ_BUF_SZ) {
|
if (screen->pending_mode.capacity >= READ_BUF_SZ) {
|
||||||
dump_partial_escape_code_to_pending(screen);
|
dump_partial_escape_code_to_pending(screen);
|
||||||
|
|||||||
@ -119,6 +119,7 @@ typedef struct {
|
|||||||
size_t capacity, used;
|
size_t capacity, used;
|
||||||
uint8_t *buf;
|
uint8_t *buf;
|
||||||
monotonic_t activated_at, wait_time;
|
monotonic_t activated_at, wait_time;
|
||||||
|
unsigned stop_escape_code_type;
|
||||||
} pending_mode;
|
} pending_mode;
|
||||||
DisableLigature disable_ligatures;
|
DisableLigature disable_ligatures;
|
||||||
PyObject *marker;
|
PyObject *marker;
|
||||||
|
|||||||
@ -347,7 +347,7 @@ class TestParser(BaseTest):
|
|||||||
pb('\033P=1s\033\\', ('screen_start_pending_mode',))
|
pb('\033P=1s\033\\', ('screen_start_pending_mode',))
|
||||||
pb('a')
|
pb('a')
|
||||||
self.ae(str(s.line(0)), '')
|
self.ae(str(s.line(0)), '')
|
||||||
pb('\033P=2s\033\\', ('screen_stop_pending_mode',), ('draw', 'a'))
|
pb('\033P=2s\033\\', ('draw', 'a'), ('screen_stop_pending_mode',))
|
||||||
self.ae(str(s.line(0)), 'a')
|
self.ae(str(s.line(0)), 'a')
|
||||||
pb('\033P=1s\033\\', ('screen_start_pending_mode',))
|
pb('\033P=1s\033\\', ('screen_start_pending_mode',))
|
||||||
pb('b')
|
pb('b')
|
||||||
@ -356,20 +356,20 @@ class TestParser(BaseTest):
|
|||||||
pb('c', ('draw', 'bc'))
|
pb('c', ('draw', 'bc'))
|
||||||
self.ae(str(s.line(0)), 'abc')
|
self.ae(str(s.line(0)), 'abc')
|
||||||
pb('\033P=1s\033\\d', ('screen_start_pending_mode',))
|
pb('\033P=1s\033\\d', ('screen_start_pending_mode',))
|
||||||
pb('\033P=2s\033\\', ('screen_stop_pending_mode',), ('draw', 'd'))
|
pb('\033P=2s\033\\', ('draw', 'd'), ('screen_stop_pending_mode',))
|
||||||
pb('\033P=1s\033\\e', ('screen_start_pending_mode',))
|
pb('\033P=1s\033\\e', ('screen_start_pending_mode',))
|
||||||
pb('\033P'), pb('='), pb('2s')
|
pb('\033P'), pb('='), pb('2s')
|
||||||
pb('\033\\', ('screen_stop_pending_mode',), ('draw', 'e'))
|
pb('\033\\', ('draw', 'e'), ('screen_stop_pending_mode',))
|
||||||
pb('\033P=1sxyz;.;\033\\''\033P=2skjf".,><?_+)98\033\\', ('screen_start_pending_mode',), ('screen_stop_pending_mode',))
|
pb('\033P=1sxyz;.;\033\\''\033P=2skjf".,><?_+)98\033\\', ('screen_start_pending_mode',))
|
||||||
pb('\033P=1s\033\\f\033P=1s\033\\', ('screen_start_pending_mode',), ('screen_start_pending_mode',))
|
pb('\033P=1s\033\\f\033P=1s\033\\', ('screen_start_pending_mode',), ('screen_start_pending_mode',))
|
||||||
pb('\033P=2s\033\\', ('screen_stop_pending_mode',), ('draw', 'f'))
|
pb('\033P=2s\033\\', ('draw', 'f'), ('screen_stop_pending_mode',))
|
||||||
pb('\033P=1s\033\\XXX\033P=2s\033\\', ('screen_start_pending_mode',), ('screen_stop_pending_mode',), ('draw', 'XXX'))
|
pb('\033P=1s\033\\XXX\033P=2s\033\\', ('screen_start_pending_mode',), ('draw', 'XXX'), ('screen_stop_pending_mode',))
|
||||||
|
|
||||||
pb('\033[?2026hXXX\033[?2026l', ('screen_set_mode', 2026, 1), ('screen_reset_mode', 2026, 1), ('draw', 'XXX'))
|
pb('\033[?2026hXXX\033[?2026l', ('screen_set_mode', 2026, 1), ('draw', 'XXX'), ('screen_reset_mode', 2026, 1))
|
||||||
pb('\033[?2026h\033[32ma\033[?2026l', ('screen_set_mode', 2026, 1), ('screen_reset_mode', 2026, 1), ('select_graphic_rendition', '32 '), ('draw', 'a'))
|
pb('\033[?2026h\033[32ma\033[?2026l', ('screen_set_mode', 2026, 1), ('select_graphic_rendition', '32 '), ('draw', 'a'), ('screen_reset_mode', 2026, 1))
|
||||||
pb('\033[?2026h\033P+q544e\033\\ama\033P=2s\033\\',
|
pb('\033[?2026h\033P+q544e\033\\ama\033P=2s\033\\',
|
||||||
('screen_set_mode', 2026, 1), ('screen_stop_pending_mode',), ('screen_request_capabilities', 43, '544e'), ('draw', 'ama'))
|
('screen_set_mode', 2026, 1), ('screen_request_capabilities', 43, '544e'), ('draw', 'ama'), ('screen_stop_pending_mode',))
|
||||||
pb('\033P=1s\033\\\033(B\033P=2s\033\\', ('screen_start_pending_mode',), ('screen_stop_pending_mode',), ('screen_designate_charset', 0, 66))
|
pb('\033P=1s\033\\\033(B\033P=2s\033\\', ('screen_start_pending_mode',), ('screen_designate_charset', 0, 66), ('screen_stop_pending_mode',))
|
||||||
|
|
||||||
s.reset()
|
s.reset()
|
||||||
s.set_pending_timeout(timeout)
|
s.set_pending_timeout(timeout)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user