Read DCS control sequences

Still have to implement responses to them.
This commit is contained in:
Kovid Goyal
2016-10-21 04:24:20 +05:30
parent 067662de94
commit e50d811da7
4 changed files with 30 additions and 6 deletions

View File

@@ -68,3 +68,6 @@ ST = b"\x9c"
#: *Operating system command*.
OSC = b"\x9d"
#: Device Control function (DCS)
DCS = ESC + b"P"

View File

@@ -64,3 +64,11 @@ DECCOLM = 3 << 5
BRACKETED_PASTE = 2004 << 5
BRACKETED_PASTE_START = '\033[200~'.encode('ascii')
BRACKETED_PASTE_END = '\033[201~'.encode('ascii')
#: Xterm mouse protocol
SEND_MOUSE_ON_PRESS_AND_RELEASE = 1000 << 5
HILITE_MOUSE_TRACKING = 1001 << 5
CELL_MOTION_MOUSE_TRACKING = 1002 << 5
FOCUS_TRACKING = 1004 << 5
UTF8_MOUSE_MODE = 1005 << 5
SGR_MOUSE_MODE = 1006 << 6

View File

@@ -216,7 +216,7 @@ class Stream(object):
debug = listener.debug
ESC, CSI = ctrl.ESC, ctrl.CSI
OSC, ST = ctrl.OSC, ctrl.ST
OSC, ST, DCS = ctrl.OSC, ctrl.ST, ctrl.DCS
SP_OR_GT = ctrl.SP + b">"
NUL_OR_DEL = ctrl.NUL + ctrl.DEL
CAN_OR_SUB = ctrl.CAN + ctrl.SUB
@@ -256,6 +256,8 @@ class Stream(object):
char = CSI # Go to CSI.
elif char == b"]":
char = OSC # Go to OSC.
elif char == b'P':
char = DCS # Go to DCS
else:
if char == b"#":
sharp_dispatch[(yield)]()
@@ -332,6 +334,17 @@ class Stream(object):
listener.set_icon_name(param)
if code in b"02":
listener.set_title(param)
elif char == DCS:
# See http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-Device-Control-functions
code = yield
param = bytearray()
while True:
char = yield
if char == ST:
break
else:
param.extend(char)
# TODO: Implement these
elif char not in NUL_OR_DEL:
draw(char)