Fix designate_charset without change_charset not taking effect
This commit is contained in:
@@ -176,12 +176,17 @@ screen_change_charset(Screen *self, uint32_t which) {
|
|||||||
|
|
||||||
void
|
void
|
||||||
screen_designate_charset(Screen *self, uint32_t which, uint32_t as) {
|
screen_designate_charset(Screen *self, uint32_t which, uint32_t as) {
|
||||||
|
bool change_g = false;
|
||||||
switch(which) {
|
switch(which) {
|
||||||
case 0:
|
case 0:
|
||||||
|
change_g = self->g_charset == self->g0_charset;
|
||||||
self->g0_charset = translation_table(as);
|
self->g0_charset = translation_table(as);
|
||||||
|
if (change_g) self->g_charset = self->g0_charset;
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
|
change_g = self->g_charset == self->g1_charset;
|
||||||
self->g1_charset = translation_table(as);
|
self->g1_charset = translation_table(as);
|
||||||
|
if (change_g) self->g_charset = self->g1_charset;
|
||||||
break;
|
break;
|
||||||
// We dont care about default as this is guaranteed to only be called with correct which by the parser
|
// We dont care about default as this is guaranteed to only be called with correct which by the parser
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -75,6 +75,10 @@ class TestParser(BaseTest):
|
|||||||
pb('\033)0\x0e/_', ('screen_designate_charset', 1, ord('0')), ('screen_change_charset', 1), '/_')
|
pb('\033)0\x0e/_', ('screen_designate_charset', 1, ord('0')), ('screen_change_charset', 1), '/_')
|
||||||
self.ae(str(s.line(0)), '/\xa0 ')
|
self.ae(str(s.line(0)), '/\xa0 ')
|
||||||
pb('\033%G_', ('screen_use_latin1', 0), '_')
|
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):
|
def test_csi_codes(self):
|
||||||
s = self.create_screen()
|
s = self.create_screen()
|
||||||
|
|||||||
Reference in New Issue
Block a user