Fix designate_charset without change_charset not taking effect

This commit is contained in:
Kovid Goyal 2016-12-13 12:43:20 +05:30
parent a568f73e77
commit 3c9d4dfb90
2 changed files with 9 additions and 0 deletions

View File

@ -176,12 +176,17 @@ screen_change_charset(Screen *self, uint32_t which) {
void
screen_designate_charset(Screen *self, uint32_t which, uint32_t as) {
bool change_g = false;
switch(which) {
case 0:
change_g = self->g_charset == self->g0_charset;
self->g0_charset = translation_table(as);
if (change_g) self->g_charset = self->g0_charset;
break;
case 1:
change_g = self->g_charset == self->g1_charset;
self->g1_charset = translation_table(as);
if (change_g) self->g_charset = self->g1_charset;
break;
// We dont care about default as this is guaranteed to only be called with correct which by the parser
}

View File

@ -75,6 +75,10 @@ class TestParser(BaseTest):
pb('\033)0\x0e/_', ('screen_designate_charset', 1, ord('0')), ('screen_change_charset', 1), '/_')
self.ae(str(s.line(0)), '/\xa0 ')
pb('\033%G_', ('screen_use_latin1', 0), '_')
s = self.create_screen()
pb = partial(self.parse_bytes_dump, s)
pb('\033(0/_', ('screen_designate_charset', 0, ord('0')), '/_')
self.ae(str(s.line(0)), '/\xa0 ')
def test_csi_codes(self):
s = self.create_screen()