diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 1638b0fd9..0b038a56d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -333,7 +333,7 @@ jobs: run: nix build .#ghostty-releasefast - name: Check version - run: result/bin/ghostty +version | grep -q 'builtin.OptimizeMode.ReleaseFast' + run: result/bin/ghostty +version | grep -q '.ReleaseFast' - name: Check to see if the binary has been stripped run: nm result/bin/.ghostty-wrapped 2>&1 | grep -q 'no symbols' @@ -342,7 +342,7 @@ jobs: run: nix build .#ghostty-debug - name: Check version - run: result/bin/ghostty +version | grep -q 'builtin.OptimizeMode.Debug' + run: result/bin/ghostty +version | grep -q '.Debug' - name: Check to see if the binary has not been stripped run: nm result/bin/.ghostty-wrapped 2>&1 | grep -q 'main_ghostty.main' @@ -513,7 +513,7 @@ jobs: $fileContent = Get-Content -Path "build.zig" -Raw $pattern = 'buildpkg\.requireZig\("(.*?)"\);' $zigVersion = [regex]::Match($fileContent, $pattern).Groups[1].Value - $version = "zig-windows-x86_64-$zigVersion" + $version = "zig-x86_64-windows-$zigVersion" Write-Output $version $uri = "https://ziglang.org/download/$zigVersion/$version.zip" Invoke-WebRequest -Uri "$uri" -OutFile ".\zig-windows.zip" diff --git a/nix/package.nix b/nix/package.nix index fcc80b9dc..73d31c3b9 100644 --- a/nix/package.nix +++ b/nix/package.nix @@ -10,7 +10,7 @@ git, ncurses, pkg-config, - zig_0_14, + zig_0_15, pandoc, revision ? "dirty", optimize ? "Debug", @@ -27,7 +27,7 @@ # https://github.com/ziglang/zig/issues/14281#issuecomment-1624220653 is # ultimately acted on and has made its way to a nixpkgs implementation, this # can probably be removed in favor of that. - zig_hook = zig_0_14.hook.overrideAttrs { + zig_hook = zig_0_15.hook.overrideAttrs { zig_default_flags = "-Dcpu=baseline -Doptimize=${optimize} --color off"; }; gi_typelib_path = import ./build-support/gi-typelib-path.nix { diff --git a/src/build/GhosttyLib.zig b/src/build/GhosttyLib.zig index d5ec66de8..2ac383544 100644 --- a/src/build/GhosttyLib.zig +++ b/src/build/GhosttyLib.zig @@ -82,6 +82,9 @@ pub fn initShared( .omit_frame_pointer = deps.config.strip, .unwind_tables = if (deps.config.strip) .none else .sync, }), + + // Fails on self-hosted x86_64 + .use_llvm = true, }); _ = try deps.add(lib); diff --git a/src/build/docker/debian/Dockerfile b/src/build/docker/debian/Dockerfile index 73c7da7c8..815d395cd 100644 --- a/src/build/docker/debian/Dockerfile +++ b/src/build/docker/debian/Dockerfile @@ -29,10 +29,10 @@ COPY ./build.zig /src # Install zig # https://ziglang.org/download/ -RUN export ZIG_VERSION=$(sed -n -e 's/^.*requireZig("\(.*\)").*$/\1/p' build.zig) && curl -L -o /tmp/zig.tar.xz "https://ziglang.org/download/$ZIG_VERSION/zig-linux-$(uname -m)-$ZIG_VERSION.tar.xz" && \ +RUN export ZIG_VERSION=$(sed -n -e 's/^.*requireZig("\(.*\)").*$/\1/p' build.zig) && curl -L -o /tmp/zig.tar.xz "https://ziglang.org/download/$ZIG_VERSION/zig-$(uname -m)-linux-$ZIG_VERSION.tar.xz" && \ tar -xf /tmp/zig.tar.xz -C /opt && \ rm /tmp/zig.tar.xz && \ - ln -s "/opt/zig-linux-$(uname -m)-$ZIG_VERSION/zig" /usr/local/bin/zig + ln -s "/opt/zig-$(uname -m)-linux-$ZIG_VERSION/zig" /usr/local/bin/zig COPY . /src diff --git a/src/font/Collection.zig b/src/font/Collection.zig index e91fe03ae..5ec076608 100644 --- a/src/font/Collection.zig +++ b/src/font/Collection.zig @@ -223,12 +223,13 @@ fn getFaceFromEntry( // Calculate the scale factor for this // entry now that we have a loaded face. - entry.scale_factor = .{ - .scale = self.scaleFactor( + if (entry.scale_factor == .adjustment) { + const factor = self.scaleFactor( face.getMetrics(), entry.scale_factor.adjustment, - ), - }; + ); + entry.scale_factor = .{ .scale = factor }; + } // If our scale factor is something other // than 1.0 then we need to resize the face. diff --git a/src/synthetic/cli/Ascii.zig b/src/synthetic/cli/Ascii.zig index 14de5edb8..339bdee2e 100644 --- a/src/synthetic/cli/Ascii.zig +++ b/src/synthetic/cli/Ascii.zig @@ -35,10 +35,10 @@ pub fn run(self: *Ascii, writer: *std.Io.Writer, rand: std.Random) !void { while (true) { const data = try gen.next(&buf); writer.writeAll(data) catch |err| { - const Error = error{ NoSpaceLeft, BrokenPipe } || @TypeOf(err); + const Error = error{ WriteFailed, BrokenPipe } || @TypeOf(err); switch (@as(Error, err)) { error.BrokenPipe => return, // stdout closed - error.NoSpaceLeft => return, // fixed buffer full + error.WriteFailed => return, // fixed buffer full else => return err, } }; @@ -56,8 +56,6 @@ test Ascii { const rand = prng.random(); var buf: [1024]u8 = undefined; - var fbs = std.io.fixedBufferStream(&buf); - const writer = fbs.writer(); - - try impl.run(writer, rand); + var writer: std.Io.Writer = .fixed(&buf); + try impl.run(&writer, rand); } diff --git a/src/synthetic/cli/Osc.zig b/src/synthetic/cli/Osc.zig index 8dd3d46ed..23d19e4ae 100644 --- a/src/synthetic/cli/Osc.zig +++ b/src/synthetic/cli/Osc.zig @@ -39,10 +39,10 @@ pub fn run(self: *Osc, writer: *std.Io.Writer, rand: std.Random) !void { while (true) { const data = try gen.next(&buf); writer.writeAll(data) catch |err| { - const Error = error{ NoSpaceLeft, BrokenPipe } || @TypeOf(err); + const Error = error{ WriteFailed, BrokenPipe } || @TypeOf(err); switch (@as(Error, err)) { error.BrokenPipe => return, // stdout closed - error.NoSpaceLeft => return, // fixed buffer full + error.WriteFailed => return, // fixed buffer full else => return err, } }; @@ -60,8 +60,6 @@ test Osc { const rand = prng.random(); var buf: [1024]u8 = undefined; - var fbs = std.io.fixedBufferStream(&buf); - const writer = fbs.writer(); - - try impl.run(writer, rand); + var writer: std.Io.Writer = .fixed(&buf); + try impl.run(&writer, rand); } diff --git a/src/synthetic/cli/Utf8.zig b/src/synthetic/cli/Utf8.zig index 65437d1ae..3c2fddef7 100644 --- a/src/synthetic/cli/Utf8.zig +++ b/src/synthetic/cli/Utf8.zig @@ -34,10 +34,10 @@ pub fn run(self: *Utf8, writer: *std.Io.Writer, rand: std.Random) !void { while (true) { const data = try gen.next(&buf); writer.writeAll(data) catch |err| { - const Error = error{ NoSpaceLeft, BrokenPipe } || @TypeOf(err); + const Error = error{ WriteFailed, BrokenPipe } || @TypeOf(err); switch (@as(Error, err)) { error.BrokenPipe => return, // stdout closed - error.NoSpaceLeft => return, // fixed buffer full + error.WriteFailed => return, // fixed buffer full else => return err, } }; @@ -55,8 +55,6 @@ test Utf8 { const rand = prng.random(); var buf: [1024]u8 = undefined; - var fbs = std.io.fixedBufferStream(&buf); - const writer = fbs.writer(); - - try impl.run(writer, rand); + var writer: std.Io.Writer = .fixed(&buf); + try impl.run(&writer, rand); } diff --git a/src/terminal/kitty/graphics_command.zig b/src/terminal/kitty/graphics_command.zig index 08b2e378a..99a7cdaac 100644 --- a/src/terminal/kitty/graphics_command.zig +++ b/src/terminal/kitty/graphics_command.zig @@ -1214,41 +1214,41 @@ test "all i32 values" { test "response: encode nothing without ID or image number" { const testing = std.testing; var buf: [1024]u8 = undefined; - var fbs = std.io.fixedBufferStream(&buf); + var writer: std.Io.Writer = .fixed(&buf); var r: Response = .{}; - try r.encode(fbs.writer()); - try testing.expectEqualStrings("", fbs.getWritten()); + try r.encode(&writer); + try testing.expectEqualStrings("", writer.buffered()); } test "response: encode with only image id" { const testing = std.testing; var buf: [1024]u8 = undefined; - var fbs = std.io.fixedBufferStream(&buf); + var writer: std.Io.Writer = .fixed(&buf); var r: Response = .{ .id = 4 }; - try r.encode(fbs.writer()); - try testing.expectEqualStrings("\x1b_Gi=4;OK\x1b\\", fbs.getWritten()); + try r.encode(&writer); + try testing.expectEqualStrings("\x1b_Gi=4;OK\x1b\\", writer.buffered()); } test "response: encode with only image number" { const testing = std.testing; var buf: [1024]u8 = undefined; - var fbs = std.io.fixedBufferStream(&buf); + var writer: std.Io.Writer = .fixed(&buf); var r: Response = .{ .image_number = 4 }; - try r.encode(fbs.writer()); - try testing.expectEqualStrings("\x1b_GI=4;OK\x1b\\", fbs.getWritten()); + try r.encode(&writer); + try testing.expectEqualStrings("\x1b_GI=4;OK\x1b\\", writer.buffered()); } test "response: encode with image ID and number" { const testing = std.testing; var buf: [1024]u8 = undefined; - var fbs = std.io.fixedBufferStream(&buf); + var writer: std.Io.Writer = .fixed(&buf); var r: Response = .{ .id = 12, .image_number = 4 }; - try r.encode(fbs.writer()); - try testing.expectEqualStrings("\x1b_Gi=12,I=4;OK\x1b\\", fbs.getWritten()); + try r.encode(&writer); + try testing.expectEqualStrings("\x1b_Gi=12,I=4;OK\x1b\\", writer.buffered()); } test "delete range command 1" { diff --git a/src/terminfo/Source.zig b/src/terminfo/Source.zig index 6a068c906..91fee1ace 100644 --- a/src/terminfo/Source.zig +++ b/src/terminfo/Source.zig @@ -230,8 +230,8 @@ test "encode" { // Encode var buf: [1024]u8 = undefined; - var buf_stream = std.io.fixedBufferStream(&buf); - try src.encode(buf_stream.writer()); + var writer: std.Io.Writer = .fixed(&buf); + try src.encode(&writer); const expected = "ghostty|xterm-ghostty|Ghostty,\n" ++ @@ -239,5 +239,5 @@ test "encode" { "\tccc@,\n" ++ "\tcolors#256,\n" ++ "\tbel=^G,\n"; - try std.testing.expectEqualStrings(@as([]const u8, expected), buf_stream.getWritten()); + try std.testing.expectEqualStrings(@as([]const u8, expected), writer.buffered()); } diff --git a/src/terminfo/ghostty.zig b/src/terminfo/ghostty.zig index f96154c9b..6451836e7 100644 --- a/src/terminfo/ghostty.zig +++ b/src/terminfo/ghostty.zig @@ -391,7 +391,7 @@ pub const ghostty: Source = .{ test "encode" { // Encode var buf: [1024 * 16]u8 = undefined; - var buf_stream = std.io.fixedBufferStream(&buf); - try ghostty.encode(buf_stream.writer()); - try std.testing.expect(buf_stream.getWritten().len > 0); + var writer: std.Io.Writer = .fixed(&buf); + try ghostty.encode(&writer); + try std.testing.expect(writer.buffered().len > 0); }