mirror of
https://mzte.de/git/LordMZTE/dotfiles.git
synced 2024-05-17 06:23:50 +02:00
67 lines
2 KiB
Zig
67 lines
2 KiB
Zig
const std = @import("std");
|
|
const FishMode = @import("FishMode.zig");
|
|
const prompt = @import("prompt.zig");
|
|
|
|
const fish_code =
|
|
\\functions -e fish_mode_prompt
|
|
\\function fish_prompt
|
|
\\ set -x MZPROMPT_STATUS $status
|
|
\\ set -x MZPROMPT_FISH_MODE $fish_bind_mode
|
|
\\ set -x MZPROMPT_DURATION $CMD_DURATION
|
|
\\ set -x MZPROMPT_JOBS (count (jobs))
|
|
\\ {s} show
|
|
\\end
|
|
;
|
|
|
|
pub const std_options = std.Options{
|
|
.log_level = .debug,
|
|
.logFn = @import("common").logFn,
|
|
};
|
|
|
|
pub fn main() !void {
|
|
if (std.os.argv.len < 2)
|
|
return error.NotEnoughArguments;
|
|
|
|
const verb = std.mem.span(std.os.argv[1]);
|
|
|
|
if (std.mem.eql(u8, verb, "printfish")) {
|
|
const stdout = std.io.getStdOut();
|
|
try stdout.writer().print(fish_code ++ "\n", .{std.os.argv[0]});
|
|
} else if (std.mem.eql(u8, verb, "show")) {
|
|
const options = prompt.Options{
|
|
.status = try std.fmt.parseInt(
|
|
i16,
|
|
std.os.getenv("MZPROMPT_STATUS") orelse
|
|
return error.MissingEnv,
|
|
10,
|
|
),
|
|
.mode = FishMode.parse(
|
|
std.os.getenv("MZPROMPT_FISH_MODE") orelse
|
|
return error.MissingEnv,
|
|
),
|
|
.duration = try std.fmt.parseInt(
|
|
u32,
|
|
std.os.getenv("MZPROMPT_DURATION") orelse
|
|
return error.MissingEnv,
|
|
10,
|
|
),
|
|
.jobs = try std.fmt.parseInt(
|
|
u32,
|
|
std.os.getenv("MZPROMPT_JOBS") orelse
|
|
return error.MissingEnv,
|
|
10,
|
|
),
|
|
};
|
|
|
|
var buf: [1024 * 8]u8 = undefined;
|
|
var fbs = std.io.fixedBufferStream(&buf);
|
|
prompt.render(fbs.writer(), options) catch |e| {
|
|
fbs.reset();
|
|
fbs.writer().print("Render Error: {s}\n|> ", .{@errorName(e)}) catch unreachable;
|
|
};
|
|
try std.io.getStdOut().writeAll(fbs.getWritten());
|
|
} else {
|
|
return error.UnknownCommand;
|
|
}
|
|
}
|