Added basic terminal detection for truecolor support.

This commit is contained in:
mike 2024-04-06 17:45:37 -07:00
parent a552bf6fd4
commit de09f7a71c
2 changed files with 23 additions and 8 deletions

View file

@ -437,6 +437,9 @@ class TelnetProtocol(Telnet, StatefulTelnetProtocol, _BASE_SESSION_CLASS):
xterm256 = options.get( xterm256 = options.get(
"xterm256", flags.get("XTERM256", False) if flags.get("TTYPE", False) else True "xterm256", flags.get("XTERM256", False) if flags.get("TTYPE", False) else True
) )
truecolor = options.get(
"truecolor", flags.get("TRUECOLOR", False) if flags.get("TTYPE", False) else True
)
useansi = options.get( useansi = options.get(
"ansi", flags.get("ANSI", False) if flags.get("TTYPE", False) else True "ansi", flags.get("ANSI", False) if flags.get("TTYPE", False) else True
) )
@ -460,6 +463,7 @@ class TelnetProtocol(Telnet, StatefulTelnetProtocol, _BASE_SESSION_CLASS):
_RE_N.sub("", prompt) + ("||n" if prompt.endswith("|") else "|n"), _RE_N.sub("", prompt) + ("||n" if prompt.endswith("|") else "|n"),
strip_ansi=nocolor, strip_ansi=nocolor,
xterm256=xterm256, xterm256=xterm256,
truecolor=truecolor
) )
if mxp: if mxp:
prompt = mxp_parse(prompt) prompt = mxp_parse(prompt)
@ -496,6 +500,7 @@ class TelnetProtocol(Telnet, StatefulTelnetProtocol, _BASE_SESSION_CLASS):
strip_ansi=nocolor, strip_ansi=nocolor,
xterm256=xterm256, xterm256=xterm256,
mxp=mxp, mxp=mxp,
truecolor=truecolor
) )
if mxp: if mxp:
linetosend = mxp_parse(linetosend) linetosend = mxp_parse(linetosend)

View file

@ -130,10 +130,10 @@ class Ttype:
self.protocol.protocol_flags["NOPROMPTGOAHEAD"] = False self.protocol.protocol_flags["NOPROMPTGOAHEAD"] = False
if ( if (
clientname.startswith("XTERM") clientname.startswith("XTERM")
or clientname.endswith("-256COLOR") or clientname.endswith("-256COLOR")
or clientname or clientname
in ( in (
"ATLANTIS", # > 0.9.9.0 (aug 2009) "ATLANTIS", # > 0.9.9.0 (aug 2009)
"CMUD", # > 3.04 (mar 2009) "CMUD", # > 3.04 (mar 2009)
"KILDCLIENT", # > 2.2.0 (sep 2005) "KILDCLIENT", # > 2.2.0 (sep 2005)
@ -143,13 +143,23 @@ class Ttype:
"BEIP", # > 2.00.206 (late 2009) (BeipMu) "BEIP", # > 2.00.206 (late 2009) (BeipMu)
"POTATO", # > 2.00 (maybe earlier) "POTATO", # > 2.00 (maybe earlier)
"TINYFUGUE", # > 4.x (maybe earlier) "TINYFUGUE", # > 4.x (maybe earlier)
) )
): ):
xterm256 = True xterm256 = True
# use name to identify support for xterm truecolor
truecolor = False
if (clientname.endswith("-TRUECOLOR") or
clientname in (
"AXMUD",
"TINTIN"
)):
truecolor = True
# all clients supporting TTYPE at all seem to support ANSI # all clients supporting TTYPE at all seem to support ANSI
self.protocol.protocol_flags["ANSI"] = True self.protocol.protocol_flags["ANSI"] = True
self.protocol.protocol_flags["XTERM256"] = xterm256 self.protocol.protocol_flags["XTERM256"] = xterm256
self.protocol.protocol_flags["TRUECOLOR"] = truecolor
self.protocol.protocol_flags["CLIENTNAME"] = clientname self.protocol.protocol_flags["CLIENTNAME"] = clientname
self.protocol.requestNegotiation(TTYPE, SEND) self.protocol.requestNegotiation(TTYPE, SEND)
@ -159,9 +169,9 @@ class Ttype:
tupper = term.upper() tupper = term.upper()
# identify xterm256 based on flag # identify xterm256 based on flag
xterm256 = ( xterm256 = (
tupper.endswith("-256COLOR") tupper.endswith("-256COLOR")
or tupper.endswith("XTERM") # Apple Terminal, old Tintin or tupper.endswith("XTERM") # Apple Terminal, old Tintin
and not tupper.endswith("-COLOR") # old Tintin, Putty and not tupper.endswith("-COLOR") # old Tintin, Putty
) )
if xterm256: if xterm256:
self.protocol.protocol_flags["ANSI"] = True self.protocol.protocol_flags["ANSI"] = True