update allow unicode images in windows terminal

This commit is contained in:
z1fire 2024-11-30 15:13:02 -05:00
parent 22badde8c0
commit f9d8ef3776
2 changed files with 43 additions and 2 deletions

View File

@ -3,7 +3,7 @@ const args = @import("args");
const util = @import("../util.zig");
const cli = @import("../cli.zig");
const uPrint = @import("unicodeprint.zig");
const init_data = @import("init_data").init_data;
/// Command line options for the `init` command.
@ -209,7 +209,7 @@ pub fn run(
// const git_setup = false;
// if (git_setup) try gitSetup(allocator, install_dir);
std.debug.print(
try uPrint.unicodePrint(
\\
\\Setup complete! ✈️ 🦎
\\

View File

@ -0,0 +1,41 @@
const std = @import("std");
const builtin = @import("builtin");
pub fn unicodePrint(comptime fmt: []const u8, args: anytype) !void {
if (builtin.os.tag == .windows) {
// Windows-specific code
const cp_out = try UTF8ConsoleOutput.init();
defer cp_out.deinit();
std.debug.print(comptime fmt, args);
} else {
// Non-Windows platforms just print normally
std.debug.print(fmt, args);
}
}
const UTF8ConsoleOutput = struct {
original: if (builtin.os.tag == .windows) c_uint else void,
fn init() !UTF8ConsoleOutput {
if (builtin.os.tag == .windows) {
const original = std.os.windows.kernel32.GetConsoleOutputCP();
if (original == 0) {
return error.FailedToGetConsoleOutputCP;
}
const result = std.os.windows.kernel32.SetConsoleOutputCP(65001); // UTF-8 code page
if (result == 0) {
return error.FailedToSetConsoleOutputCP;
}
return .{ .original = original };
}
// For non-Windows, return an empty struct
return .{ .original = {} };
}
fn deinit(self: UTF8ConsoleOutput) void {
if (builtin.os.tag == .windows) {
// Restore the original code page
_ = std.os.windows.kernel32.SetConsoleOutputCP(self.original);
}
}
};