mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-08-02 14:57:31 +03:00
terminal: respond to XTVERSION query
XTVERSION (CSI > 0 q) is used by some libraries to identify the terminal + version. Respond to this query with `ghostty {version_string}`. There is no formal format for this response. A roundup of a few tested terminals show two primary formats. This patch opts to save one byte and use the `name SP version` semantics. foot: foot(version) xterm: XTerm(version) contour: contour version wezterm: wezterm version Reference: https://github.com/dankamongmen/notcurses/blob/master/TERMINALS.md#notes-for-terminal-authors Signed-off-by: Tim Culverhouse <tim@timculverhouse.com>
This commit is contained in:
@ -607,28 +607,32 @@ pub fn Stream(comptime Handler: type) type {
|
||||
),
|
||||
},
|
||||
|
||||
// DECSCUSR - Select Cursor Style
|
||||
// TODO: test
|
||||
'q' => switch (action.intermediates.len) {
|
||||
1 => cursor: {
|
||||
if (action.intermediates[0] != ' ') {
|
||||
1 => switch (action.intermediates[0]) {
|
||||
// DECSCUSR - Select Cursor Style
|
||||
// TODO: test
|
||||
' ' => {
|
||||
if (@hasDecl(T, "setCursorStyle")) try self.handler.setCursorStyle(
|
||||
switch (action.params.len) {
|
||||
0 => ansi.CursorStyle.default,
|
||||
1 => @enumFromInt(action.params[0]),
|
||||
else => {
|
||||
log.warn("invalid set curor style command: {}", .{action});
|
||||
return;
|
||||
},
|
||||
},
|
||||
) else log.warn("unimplemented CSI callback: {}", .{action});
|
||||
},
|
||||
// XTVERSION
|
||||
'>' => {
|
||||
if (@hasDecl(T, "reportXtversion")) try self.handler.reportXtversion();
|
||||
},
|
||||
else => {
|
||||
log.warn(
|
||||
"ignoring unimplemented CSI q with intermediates: {s}",
|
||||
.{action.intermediates},
|
||||
);
|
||||
break :cursor;
|
||||
}
|
||||
|
||||
if (@hasDecl(T, "setCursorStyle")) try self.handler.setCursorStyle(
|
||||
switch (action.params.len) {
|
||||
0 => ansi.CursorStyle.default,
|
||||
1 => @enumFromInt(action.params[0]),
|
||||
else => {
|
||||
log.warn("invalid set curor style command: {}", .{action});
|
||||
return;
|
||||
},
|
||||
},
|
||||
) else log.warn("unimplemented CSI callback: {}", .{action});
|
||||
},
|
||||
},
|
||||
|
||||
else => log.warn(
|
||||
|
@ -1688,6 +1688,23 @@ const StreamHandler = struct {
|
||||
self.terminal.screen.kitty_keyboard.set(mode, flags);
|
||||
}
|
||||
|
||||
pub fn reportXtversion(
|
||||
self: *StreamHandler,
|
||||
) !void {
|
||||
log.debug("reporting XTVERSION: ghostty {s}", .{build_config.version_string});
|
||||
var msg: termio.Message = .{ .write_small = .{} };
|
||||
const resp = try std.fmt.bufPrint(
|
||||
&msg.write_small.data,
|
||||
"\x1BP>|{s} {s}\x07",
|
||||
.{
|
||||
"ghostty",
|
||||
build_config.version_string,
|
||||
},
|
||||
);
|
||||
msg.write_small.len = @intCast(resp.len);
|
||||
self.messageWriter(msg);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// OSC
|
||||
|
||||
|
Reference in New Issue
Block a user