Skip to content

Instantly share code, notes, and snippets.

@meme
Created January 17, 2020 21:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save meme/41673902002f243d9edc947440ee10ab to your computer and use it in GitHub Desktop.
Save meme/41673902002f243d9edc947440ee10ab to your computer and use it in GitHub Desktop.
const std = @import("std");
const c = @cImport({
@cInclude("X11/Xlib.h");
@cInclude("time.h");
});
const X11Error = error{
NoDisplay,
InternalError,
SyncFailed,
};
const X11 = struct {
handle: ?*c.Display,
pub fn new() X11Error!X11 {
const handle = c.XOpenDisplay(null);
if (handle == null) {
return X11Error.NoDisplay;
}
return X11 {
.handle = handle
};
}
pub fn setName(self: X11, name: [:0]const u8) X11Error!void {
std.debug.warn("{}\n", .{name});
if (c.XStoreName(self.handle, c.XDefaultRootWindow(self.handle),
name) == 0) {
return X11Error.InternalError;
}
if (c.XSync(self.handle, c.True) == 0) {
return X11Error.SyncFailed;
}
}
};
fn currentTime() [:0]const u8 {
var buffer: [64]u8 = undefined;
const clock: c.time_t = c.time(null);
const time: ?*c.tm = c.localtime(&clock);
const size = c.strftime(&buffer, buffer.len, "%Y-%m-%d %H:%M:%S", time);
return buffer[0..size :0];
}
pub fn main() anyerror!void {
const desktop = try X11.new();
const time = currentTime();
std.debug.warn("{}\n", .{time});
try desktop.setName(time);
}
@meme
Copy link
Author

meme commented Jan 17, 2020

keegan@zzz:~/code/dwmstatus % rm -rf zig-cache/
keegan@zzz:~/code/dwmstatus % zig build run
2020-01-17 16:46:38
N 17 16:46:38

Now with release safe:

keegan@zzz:~/code/dwmstatus % rm -rf zig-cache/
keegan@zzz:~/code/dwmstatus % zig build -Drelease-safe=true run
2020-01-17 16:47:18
2020-01-17 16:47:18

@LemonBoy
Copy link

buffer Is stack-allocated and becomes invalid as soon as currentTime returns.

@meme
Copy link
Author

meme commented Jan 17, 2020

My assumption was that it would be copied. Will I need to allocate it to return the value?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment