Fix backslashes in OSC codes not being parsed correctly

Fixes #61
This commit is contained in:
Kovid Goyal 2017-04-05 09:07:55 +05:30
parent c504b96b60
commit db2d14d9ed
2 changed files with 7 additions and 7 deletions

View File

@ -519,16 +519,16 @@ accumulate_osc(Screen *screen, uint32_t ch, PyObject DUMP_UNUSED *dump_callback)
switch(ch) { switch(ch) {
case ST: case ST:
return true; return true;
case ESC_ST:
if (screen->parser_buf_pos > 0 && screen->parser_buf[screen->parser_buf_pos - 1] == ESC) {
screen->parser_buf_pos--;
return true;
}
case BEL: case BEL:
return true; return true;
case NUL: case NUL:
case DEL: case DEL:
break; break;
case ESC_ST:
if (screen->parser_buf_pos > 0 && screen->parser_buf[screen->parser_buf_pos - 1] == ESC) {
screen->parser_buf_pos--;
return true;
}
default: default:
if (screen->parser_buf_pos >= PARSER_BUF_SZ - 1) { if (screen->parser_buf_pos >= PARSER_BUF_SZ - 1) {
REPORT_ERROR("OSC sequence too long, truncating."); REPORT_ERROR("OSC sequence too long, truncating.");

View File

@ -156,9 +156,9 @@ class TestParser(BaseTest):
s = self.create_screen() s = self.create_screen()
pb = partial(self.parse_bytes_dump, s) pb = partial(self.parse_bytes_dump, s)
c = s.callbacks c = s.callbacks
pb('a\033]2;xyz\x9cbcde', 'a', ('set_title', 'xyz'), 'bcde') pb('a\033]2;x\\ryz\x9cbcde', 'a', ('set_title', 'x\\ryz'), 'bcde')
self.ae(str(s.line(0)), 'abcde') self.ae(str(s.line(0)), 'abcde')
self.ae(c.titlebuf, 'xyz') self.ae(c.titlebuf, 'x\\ryz')
c.clear() c.clear()
pb('\033]\x07', ('set_title', ''), ('set_icon', '')) pb('\033]\x07', ('set_title', ''), ('set_icon', ''))
self.ae(c.titlebuf, ''), self.ae(c.iconbuf, '') self.ae(c.titlebuf, ''), self.ae(c.iconbuf, '')