mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-15 16:26:08 +03:00
implement many more reset sgr attributes
This commit is contained in:
@ -165,6 +165,7 @@ pub const Cell = struct {
|
|||||||
italic: bool = false,
|
italic: bool = false,
|
||||||
faint: bool = false,
|
faint: bool = false,
|
||||||
underline: bool = false,
|
underline: bool = false,
|
||||||
|
blink: bool = false,
|
||||||
inverse: bool = false,
|
inverse: bool = false,
|
||||||
strikethrough: bool = false,
|
strikethrough: bool = false,
|
||||||
|
|
||||||
|
@ -354,10 +354,20 @@ pub fn setAttribute(self: *Terminal, attr: sgr.Attribute) !void {
|
|||||||
self.screen.cursor.pen.attrs.bold = true;
|
self.screen.cursor.pen.attrs.bold = true;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
.reset_bold => {
|
||||||
|
// Bold and faint share the same SGR code for this
|
||||||
|
self.screen.cursor.pen.attrs.bold = false;
|
||||||
|
self.screen.cursor.pen.attrs.faint = false;
|
||||||
|
},
|
||||||
|
|
||||||
.italic => {
|
.italic => {
|
||||||
self.screen.cursor.pen.attrs.italic = true;
|
self.screen.cursor.pen.attrs.italic = true;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
.reset_italic => {
|
||||||
|
self.screen.cursor.pen.attrs.italic = false;
|
||||||
|
},
|
||||||
|
|
||||||
.faint => {
|
.faint => {
|
||||||
self.screen.cursor.pen.attrs.faint = true;
|
self.screen.cursor.pen.attrs.faint = true;
|
||||||
},
|
},
|
||||||
@ -366,6 +376,19 @@ pub fn setAttribute(self: *Terminal, attr: sgr.Attribute) !void {
|
|||||||
self.screen.cursor.pen.attrs.underline = true;
|
self.screen.cursor.pen.attrs.underline = true;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
.reset_underline => {
|
||||||
|
self.screen.cursor.pen.attrs.underline = false;
|
||||||
|
},
|
||||||
|
|
||||||
|
.blink => {
|
||||||
|
log.warn("blink requested, but not implemented", .{});
|
||||||
|
self.screen.cursor.pen.attrs.blink = true;
|
||||||
|
},
|
||||||
|
|
||||||
|
.reset_blink => {
|
||||||
|
self.screen.cursor.pen.attrs.blink = false;
|
||||||
|
},
|
||||||
|
|
||||||
.inverse => {
|
.inverse => {
|
||||||
self.screen.cursor.pen.attrs.inverse = true;
|
self.screen.cursor.pen.attrs.inverse = true;
|
||||||
},
|
},
|
||||||
@ -434,7 +457,7 @@ pub fn setAttribute(self: *Terminal, attr: sgr.Attribute) !void {
|
|||||||
self.screen.cursor.pen.bg = color.default[idx];
|
self.screen.cursor.pen.bg = color.default[idx];
|
||||||
},
|
},
|
||||||
|
|
||||||
else => return error.InvalidAttribute,
|
.unknown => return error.InvalidAttribute,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,18 +20,23 @@ pub const Attribute = union(enum) {
|
|||||||
|
|
||||||
/// Bold the text.
|
/// Bold the text.
|
||||||
bold: void,
|
bold: void,
|
||||||
|
reset_bold: void,
|
||||||
|
|
||||||
/// Italic text.
|
/// Italic text.
|
||||||
italic: void,
|
italic: void,
|
||||||
|
reset_italic: void,
|
||||||
|
|
||||||
/// Faint/dim text.
|
/// Faint/dim text.
|
||||||
|
/// Note: reset faint is the same SGR code as reset bold
|
||||||
faint: void,
|
faint: void,
|
||||||
|
|
||||||
/// Underline the text
|
/// Underline the text
|
||||||
underline: void,
|
underline: void,
|
||||||
|
reset_underline: void,
|
||||||
|
|
||||||
/// Blink the text
|
/// Blink the text
|
||||||
blink: void,
|
blink: void,
|
||||||
|
reset_blink: void,
|
||||||
|
|
||||||
/// Invert fg/bg colors.
|
/// Invert fg/bg colors.
|
||||||
inverse: void,
|
inverse: void,
|
||||||
@ -106,10 +111,20 @@ pub const Parser = struct {
|
|||||||
|
|
||||||
5 => return Attribute{ .blink = {} },
|
5 => return Attribute{ .blink = {} },
|
||||||
|
|
||||||
|
6 => return Attribute{ .blink = {} },
|
||||||
|
|
||||||
7 => return Attribute{ .inverse = {} },
|
7 => return Attribute{ .inverse = {} },
|
||||||
|
|
||||||
9 => return Attribute{ .strikethrough = {} },
|
9 => return Attribute{ .strikethrough = {} },
|
||||||
|
|
||||||
|
22 => return Attribute{ .reset_bold = {} },
|
||||||
|
|
||||||
|
23 => return Attribute{ .reset_italic = {} },
|
||||||
|
|
||||||
|
24 => return Attribute{ .reset_underline = {} },
|
||||||
|
|
||||||
|
25 => return Attribute{ .reset_blink = {} },
|
||||||
|
|
||||||
27 => return Attribute{ .reset_inverse = {} },
|
27 => return Attribute{ .reset_inverse = {} },
|
||||||
|
|
||||||
29 => return Attribute{ .reset_strikethrough = {} },
|
29 => return Attribute{ .reset_strikethrough = {} },
|
||||||
@ -225,13 +240,56 @@ test "sgr: Parser multiple" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
test "sgr: bold" {
|
test "sgr: bold" {
|
||||||
|
{
|
||||||
const v = testParse(&[_]u16{1});
|
const v = testParse(&[_]u16{1});
|
||||||
try testing.expect(v == .bold);
|
try testing.expect(v == .bold);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const v = testParse(&[_]u16{22});
|
||||||
|
try testing.expect(v == .reset_bold);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
test "sgr: italic" {
|
test "sgr: italic" {
|
||||||
|
{
|
||||||
const v = testParse(&[_]u16{3});
|
const v = testParse(&[_]u16{3});
|
||||||
try testing.expect(v == .italic);
|
try testing.expect(v == .italic);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const v = testParse(&[_]u16{23});
|
||||||
|
try testing.expect(v == .reset_italic);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
test "sgr: underline" {
|
||||||
|
{
|
||||||
|
const v = testParse(&[_]u16{4});
|
||||||
|
try testing.expect(v == .underline);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const v = testParse(&[_]u16{24});
|
||||||
|
try testing.expect(v == .reset_underline);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
test "sgr: blink" {
|
||||||
|
{
|
||||||
|
const v = testParse(&[_]u16{5});
|
||||||
|
try testing.expect(v == .blink);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const v = testParse(&[_]u16{6});
|
||||||
|
try testing.expect(v == .blink);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const v = testParse(&[_]u16{25});
|
||||||
|
try testing.expect(v == .reset_blink);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
test "sgr: inverse" {
|
test "sgr: inverse" {
|
||||||
|
Reference in New Issue
Block a user