mirror of
https://mzte.de/git/LordMZTE/dotfiles.git
synced 2024-12-19 17:03:42 +01:00
fancify prompt
This commit is contained in:
parent
d7da623a09
commit
adeb8e4472
2 changed files with 37 additions and 13 deletions
|
@ -7,7 +7,6 @@ pub const c = @cImport({
|
||||||
pub fn checkGitError(errno: c_int) !void {
|
pub fn checkGitError(errno: c_int) !void {
|
||||||
if (errno < 0) {
|
if (errno < 0) {
|
||||||
const err = c.git_error_last();
|
const err = c.git_error_last();
|
||||||
// TODO: this looks terrible. save to buf or something
|
|
||||||
std.log.err(
|
std.log.err(
|
||||||
"libgit2 error: {}/{}: {s}",
|
"libgit2 error: {}/{}: {s}",
|
||||||
.{ errno, err.*.klass, err.*.message },
|
.{ errno, err.*.klass, err.*.message },
|
||||||
|
|
|
@ -15,6 +15,8 @@ const symbols = struct {
|
||||||
const top_end = "";
|
const top_end = "";
|
||||||
const staged = "";
|
const staged = "";
|
||||||
const unstaged = "";
|
const unstaged = "";
|
||||||
|
const home = "";
|
||||||
|
const root = "";
|
||||||
};
|
};
|
||||||
|
|
||||||
pub fn render(writer: anytype, status: i16, mode: FishMode) !void {
|
pub fn render(writer: anytype, status: i16, mode: FishMode) !void {
|
||||||
|
@ -52,7 +54,7 @@ fn Renderer(comptime Writer: type) type {
|
||||||
try self.renderCwd();
|
try self.renderCwd();
|
||||||
self.renderGit() catch |err| {
|
self.renderGit() catch |err| {
|
||||||
switch (err) {
|
switch (err) {
|
||||||
error.GitError => {},
|
error.GitError => {}, // git error will be printed
|
||||||
else => return err,
|
else => return err,
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -86,7 +88,6 @@ fn Renderer(comptime Writer: type) type {
|
||||||
try self.setStyle(.{});
|
try self.setStyle(.{});
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: fancify (using symbols.path_separator) + some formatting
|
|
||||||
fn renderCwd(self: *Self) !void {
|
fn renderCwd(self: *Self) !void {
|
||||||
const pwd = std.fs.cwd();
|
const pwd = std.fs.cwd();
|
||||||
const realpath = try pwd.realpathAlloc(std.heap.c_allocator, ".");
|
const realpath = try pwd.realpathAlloc(std.heap.c_allocator, ".");
|
||||||
|
@ -102,30 +103,54 @@ fn Renderer(comptime Writer: type) type {
|
||||||
try self.setStyle(.{
|
try self.setStyle(.{
|
||||||
.background = .{ .Yellow = {} },
|
.background = .{ .Yellow = {} },
|
||||||
.foreground = .{ .Magenta = {} },
|
.foreground = .{ .Magenta = {} },
|
||||||
.font_style = .{ .bold = true },
|
|
||||||
});
|
});
|
||||||
try self.writer.writeAll(" ~/");
|
try self.writer.writeAll(" " ++ symbols.home);
|
||||||
if (home.len != realpath.len) {
|
if (home.len != realpath.len) {
|
||||||
try self.setStyle(.{
|
try self.renderPathSep();
|
||||||
.background = .{ .Yellow = {} },
|
try self.renderPath(realpath[(home.len + 1)..]);
|
||||||
.foreground = .{ .Black = {} },
|
|
||||||
});
|
|
||||||
try self.writer.writeAll(realpath[(home.len + 1)..]);
|
|
||||||
}
|
}
|
||||||
written_path = true;
|
written_path = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// write root-relative path
|
||||||
if (!written_path) {
|
if (!written_path) {
|
||||||
try self.setStyle(.{
|
try self.setStyle(.{
|
||||||
.background = .{ .Yellow = {} },
|
.background = .{ .Yellow = {} },
|
||||||
.foreground = .{ .Black = {} },
|
.foreground = .{ .Red = {} },
|
||||||
});
|
});
|
||||||
try self.writer.writeAll(" ");
|
try self.writer.writeAll(" " ++ symbols.root);
|
||||||
try self.writer.writeAll(realpath);
|
|
||||||
|
// don't render separators when we're in /
|
||||||
|
if (realpath.len > 1) {
|
||||||
|
try self.renderPathSep();
|
||||||
|
try self.renderPath(realpath[1..]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn renderPath(self: *Self, path: []const u8) !void {
|
||||||
|
for (path) |byte|
|
||||||
|
if (byte == '/')
|
||||||
|
try self.renderPathSep()
|
||||||
|
else
|
||||||
|
try self.writer.writeByte(byte);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn renderPathSep(self: *Self) !void {
|
||||||
|
try self.setStyle(.{
|
||||||
|
.background = self.last_style.?.background,
|
||||||
|
.foreground = .{ .Blue = {} },
|
||||||
|
});
|
||||||
|
|
||||||
|
try self.writer.writeAll(" " ++ symbols.path_separator ++ " ");
|
||||||
|
|
||||||
|
try self.setStyle(.{
|
||||||
|
.background = self.last_style.?.background,
|
||||||
|
.foreground = .{ .Black = {} },
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
fn renderGit(self: *Self) !void {
|
fn renderGit(self: *Self) !void {
|
||||||
_ = self;
|
_ = self;
|
||||||
try checkGitError(c.git_libgit2_init());
|
try checkGitError(c.git_libgit2_init());
|
||||||
|
|
Loading…
Reference in a new issue