Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
elif self.parsestate == 0 and char == B(']'):
# start of OSC
self.escbuf = bytes()
self.parsestate = 2
return
elif self.parsestate == 2 and char == B("\x07"):
# end of OSC
self.parse_osc(self.escbuf.lstrip(B('0')))
elif self.parsestate == 2 and self.escbuf[-1:] + char == B(ESC + '\\'):
# end of OSC
self.parse_osc(self.escbuf[:-1].lstrip(B('0')))
elif self.parsestate == 2 and self.escbuf.startswith(B('P')) and \
len(self.escbuf) == 8:
# set palette (ESC]Pnrrggbb)
pass
elif self.parsestate == 2 and not self.escbuf and char == B('R'):
# reset palette
pass
elif self.parsestate == 2:
self.escbuf += char
return
elif self.parsestate == 0 and char == B('['):
# start of CSI
self.escbuf = bytes()
self.parsestate = 1
return
elif self.parsestate == 0 and char in (B('%'), B('#'), B('('), B(')')):
# non-CSI sequence
self.escbuf = char
self.parsestate = 3
return
elif self.parsestate == 3:
self.parsestate = 0
elif char in B('0123456789;') or (not self.escbuf and char == B('?')):
self.escbuf += char
return
elif self.parsestate == 0 and char == B(']'):
# start of OSC
self.escbuf = bytes()
self.parsestate = 2
return
elif self.parsestate == 2 and char == B("\x07"):
# end of OSC
self.parse_osc(self.escbuf.lstrip(B('0')))
elif self.parsestate == 2 and self.escbuf[-1:] + char == B(ESC + '\\'):
# end of OSC
self.parse_osc(self.escbuf[:-1].lstrip(B('0')))
elif self.parsestate == 2 and self.escbuf.startswith(B('P')) and \
len(self.escbuf) == 8:
# set palette (ESC]Pnrrggbb)
pass
elif self.parsestate == 2 and not self.escbuf and char == B('R'):
# reset palette
pass
elif self.parsestate == 2:
self.escbuf += char
return
elif self.parsestate == 0 and char == B('['):
# start of CSI
self.escbuf = bytes()
self.parsestate = 1
return
elif self.parsestate == 0 and char in (B('%'), B('#'), B('('), B(')')):
# non-CSI sequence
"""
Set G0 or G1 according to 'char' and modifier 'mod'.
"""
if self.modes.main_charset != CHARSET_DEFAULT:
return
if mod == B('('):
g = 0
else:
g = 1
if char == B('0'):
cset = 'vt100'
elif char == B('U'):
cset = 'ibmpc'
elif char == B('K'):
cset = 'user'
else:
cset = 'default'
self.charset.define(g, cset)
def tab(self, tabstop=8):
"""
Moves cursor to the next 'tabstop' filling everything in between
with spaces.
"""
x, y = self.term_cursor
while x < self.width - 1:
self.set_char(B(" "))
x += 1
if self.is_tabstop(x):
break
self.is_rotten_cursor = False
self.set_term_cursor(x, y)
elif self.parsestate == 2:
self.escbuf += char
return
elif self.parsestate == 0 and char == B('['):
# start of CSI
self.escbuf = bytes()
self.parsestate = 1
return
elif self.parsestate == 0 and char in (B('%'), B('#'), B('('), B(')')):
# non-CSI sequence
self.escbuf = char
self.parsestate = 3
return
elif self.parsestate == 3:
self.parse_noncsi(char, self.escbuf)
elif char in (B('c'), B('D'), B('E'), B('H'), B('M'), B('Z'), B('7'), B('8'), B('>'), B('=')):
self.parse_noncsi(char)
self.leave_escape()
def parse_escape(self, char):
if self.parsestate == 1:
# within CSI
if char in CSI_COMMANDS.keys():
self.parse_csi(char)
self.parsestate = 0
elif char in B('0123456789;') or (not self.escbuf and char == B('?')):
self.escbuf += char
return
elif self.parsestate == 0 and char == B(']'):
# start of OSC
self.escbuf = bytes()
self.parsestate = 2
return
elif self.parsestate == 2 and char == B("\x07"):
# end of OSC
self.parse_osc(self.escbuf.lstrip(B('0')))
elif self.parsestate == 2 and self.escbuf[-1:] + char == B(ESC + '\\'):
# end of OSC
self.parse_osc(self.escbuf[:-1].lstrip(B('0')))
elif self.parsestate == 2 and self.escbuf.startswith(B('P')) and \
len(self.escbuf) == 8:
# set palette (ESC]Pnrrggbb)
def parse_osc(self, buf):
"""
Parse operating system command.
"""
if buf.startswith(B(';')): # set window title and icon
self.widget.set_title(buf[1:])
elif buf.startswith(B('3;')): # set window title
self.widget.set_title(buf[2:])
def parse_noncsi(self, char, mod=None):
"""
Parse escape sequences which are not CSI.
"""
if mod == B('#') and char == B('8'):
self.decaln()
elif mod == B('%'): # select main character set
if char == B('@'):
self.modes.main_charset = CHARSET_DEFAULT
elif char in B('G8'):
# 8 is obsolete and only for backwards compatibility
self.modes.main_charset = CHARSET_UTF8
elif mod == B('(') or mod == B(')'): # define G0/G1
self.set_g01(char, mod)
elif char == B('M'): # reverse line feed
self.linefeed(reverse=True)
elif char == B('D'): # line feed
self.linefeed()
elif char == B('c'): # reset terminal
self.reset()
elif char == B('E'): # newline