mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-08-02 14:57:31 +03:00
pkg/macos: OS Log support
This commit is contained in:
@ -22,6 +22,7 @@ pub fn link(
|
|||||||
defer flags.deinit();
|
defer flags.deinit();
|
||||||
|
|
||||||
const lib = b.addStaticLibrary("macos", null);
|
const lib = b.addStaticLibrary("macos", null);
|
||||||
|
step.addCSourceFile(comptime thisDir() ++ "/os/log.c", flags.items);
|
||||||
step.addCSourceFile(comptime thisDir() ++ "/text/ext.c", flags.items);
|
step.addCSourceFile(comptime thisDir() ++ "/text/ext.c", flags.items);
|
||||||
step.linkFramework("CoreFoundation");
|
step.linkFramework("CoreFoundation");
|
||||||
step.linkFramework("CoreText");
|
step.linkFramework("CoreText");
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
pub const foundation = @import("foundation.zig");
|
pub const foundation = @import("foundation.zig");
|
||||||
pub const graphics = @import("graphics.zig");
|
pub const graphics = @import("graphics.zig");
|
||||||
|
pub const os = @import("os.zig");
|
||||||
pub const text = @import("text.zig");
|
pub const text = @import("text.zig");
|
||||||
|
|
||||||
test {
|
test {
|
||||||
|
6
pkg/macos/os.zig
Normal file
6
pkg/macos/os.zig
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
pub const c = @import("os/c.zig");
|
||||||
|
pub usingnamespace @import("os/log.zig");
|
||||||
|
|
||||||
|
test {
|
||||||
|
@import("std").testing.refAllDecls(@This());
|
||||||
|
}
|
3
pkg/macos/os/c.zig
Normal file
3
pkg/macos/os/c.zig
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
pub usingnamespace @cImport({
|
||||||
|
@cInclude("os/log.h");
|
||||||
|
});
|
10
pkg/macos/os/log.c
Normal file
10
pkg/macos/os/log.c
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#include <os/log.h>
|
||||||
|
|
||||||
|
// A wrapper so we can use the os_log_with_type macro.
|
||||||
|
void zig_os_log_with_type(
|
||||||
|
os_log_t log,
|
||||||
|
os_log_type_t type,
|
||||||
|
const char *message
|
||||||
|
) {
|
||||||
|
os_log_with_type(log, type, "%s", message);
|
||||||
|
}
|
60
pkg/macos/os/log.zig
Normal file
60
pkg/macos/os/log.zig
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
const std = @import("std");
|
||||||
|
const assert = std.debug.assert;
|
||||||
|
const Allocator = std.mem.Allocator;
|
||||||
|
const c = @import("c.zig");
|
||||||
|
|
||||||
|
pub const Log = opaque {
|
||||||
|
pub fn create(
|
||||||
|
subsystem: [:0]const u8,
|
||||||
|
category: [:0]const u8,
|
||||||
|
) *Log {
|
||||||
|
return @intToPtr(?*Log, @ptrToInt(c.os_log_create(
|
||||||
|
subsystem.ptr,
|
||||||
|
category.ptr,
|
||||||
|
))).?;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn release(self: *Log) void {
|
||||||
|
c.os_release(self);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn typeEnabled(self: *Log, typ: LogType) bool {
|
||||||
|
return c.os_log_type_enabled(
|
||||||
|
@ptrCast(c.os_log_t, self),
|
||||||
|
@enumToInt(typ),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn log(
|
||||||
|
self: *Log,
|
||||||
|
alloc: Allocator,
|
||||||
|
typ: LogType,
|
||||||
|
comptime format: []const u8,
|
||||||
|
args: anytype,
|
||||||
|
) void {
|
||||||
|
const str = nosuspend std.fmt.allocPrintZ(alloc, format, args) catch return;
|
||||||
|
defer alloc.free(str);
|
||||||
|
zig_os_log_with_type(self, typ, str.ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "c" fn zig_os_log_with_type(*Log, LogType, [*c]const u8) void;
|
||||||
|
};
|
||||||
|
|
||||||
|
/// https://developer.apple.com/documentation/os/os_log_type_t?language=objc
|
||||||
|
pub const LogType = enum(c.os_log_type_t) {
|
||||||
|
default = c.OS_LOG_TYPE_DEFAULT,
|
||||||
|
debug = c.OS_LOG_TYPE_DEBUG,
|
||||||
|
info = c.OS_LOG_TYPE_INFO,
|
||||||
|
err = c.OS_LOG_TYPE_ERROR,
|
||||||
|
fault = c.OS_LOG_TYPE_FAULT,
|
||||||
|
};
|
||||||
|
|
||||||
|
test {
|
||||||
|
const testing = std.testing;
|
||||||
|
|
||||||
|
const log = Log.create("com.mitchellh.ghostty", "test");
|
||||||
|
defer log.release();
|
||||||
|
|
||||||
|
try testing.expect(log.typeEnabled(.fault));
|
||||||
|
log.log(testing.allocator, .default, "hello {d}", .{12});
|
||||||
|
}
|
Reference in New Issue
Block a user