From c0e315495c02aa36558e99104b73ecaf321d994d Mon Sep 17 00:00:00 2001 From: edwloef Date: Thu, 12 Mar 2026 10:19:06 +0100 Subject: [PATCH 1/4] invert priorities in file type guess --- src/file_type_config.zig | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/file_type_config.zig b/src/file_type_config.zig index a444d04f..847c21ab 100644 --- a/src/file_type_config.zig +++ b/src/file_type_config.zig @@ -167,13 +167,12 @@ pub fn guess_file_type(file_path: ?[]const u8, content: []const u8) ?@This() { } fn guess(file_path: ?[]const u8, content: []const u8) ?@This() { - if (guess_first_line(content)) |ft| return ft; for (get_all_names()) |file_type_name| { const file_type = get(file_type_name) catch unreachable orelse unreachable; if (file_path) |fp| if (syntax.FileType.match_file_type(file_type.extensions orelse continue, fp)) return file_type; } - return null; + return guess_first_line(content); } fn guess_first_line(content: []const u8) ?@This() { From fb19d50c20d89310976a85e7894bd62ebe022e7d Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Tue, 24 Mar 2026 13:53:46 +0100 Subject: [PATCH 2/4] fix: update flow-syntax to get tree-sitter-markdown fix for serialization buffer overflow --- build.zig.zon | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.zig.zon b/build.zig.zon index 6494c0ee..095e111d 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -6,8 +6,8 @@ .dependencies = .{ .syntax = .{ - .url = "git+https://github.com/neurocyte/flow-syntax?ref=master#272a2d0b01f708dcd02d43c2ed997fd7b82d6224", - .hash = "flow_syntax-0.7.2-X8jOoeFTAQAHSg9vmbAahKdrA8DDf0N-MJl8l09vMDZh", + .url = "git+https://github.com/neurocyte/flow-syntax?ref=master#56929f0c523b59153e17919be2cd09d8bef32cd0", + .hash = "flow_syntax-0.7.2-X8jOoeFTAQBeP2Tn08Tw1jsMdifLEDBgPLqPqNelAupy", }, .flags = .{ .url = "git+https://github.com/neurocyte/flags?ref=main#984b27948da3e4e40a253f76c85b51ec1a9ada11", From 742e70a6702f258870e42732ef3864d521903b8a Mon Sep 17 00:00:00 2001 From: Miguel Granero Date: Mon, 23 Feb 2026 17:09:52 +0100 Subject: [PATCH 3/4] feat: change base path of git blame for subrepo support --- src/git.zig | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/git.zig b/src/git.zig index 79c8a3f0..fa2d6abb 100644 --- a/src/git.zig +++ b/src/git.zig @@ -385,10 +385,20 @@ fn get_git() ?[]const u8 { pub fn blame(context_: usize, file_path: []const u8) !void { const tag = @src().fn_name; + const dir_path = std.fs.path.dirname(file_path) orelse "."; + const basename = std.fs.path.basename(file_path); + var arg: std.Io.Writer.Allocating = .init(allocator); + var arg2: std.Io.Writer.Allocating = .init(allocator); defer arg.deinit(); - try arg.writer.print("{s}", .{file_path}); + defer arg2.deinit(); + + try arg.writer.print("{s}", .{basename}); + try arg2.writer.print("{s}", .{dir_path}); + try git(context_, .{ + "-C", + arg2.written(), "blame", "--incremental", "HEAD", From 9df7a1393412cd3afab20958472a76c160fa2d73 Mon Sep 17 00:00:00 2001 From: Ingo Lohmar Date: Sun, 8 Mar 2026 20:38:26 +0100 Subject: [PATCH 4/4] feat: 0-based status line column Optional fifth entry in bottom_bar "linenumber" widget: If literally "true", display column 0-based (instead of 1-based) a la Emacs. --- src/tui/status/linenumstate.zig | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/tui/status/linenumstate.zig b/src/tui/status/linenumstate.zig index 4c566cbb..8eb23d40 100644 --- a/src/tui/status/linenumstate.zig +++ b/src/tui/status/linenumstate.zig @@ -28,6 +28,7 @@ padding: ?usize, leader: ?Leader, style: ?DigitStyle, mode: ?Mode, +col0: ?bool, const Leader = enum { space, @@ -45,15 +46,16 @@ const Self = @This(); const ButtonType = Button.Options(Self).ButtonType; pub fn create(allocator: Allocator, parent: Plane, event_handler: ?EventHandler, arg: ?[]const u8) @import("widget.zig").CreateError!Widget { - const padding: ?usize, const leader: ?Leader, const style: ?DigitStyle, const mode: ?Mode = if (arg) |fmt| blk: { + const padding: ?usize, const leader: ?Leader, const style: ?DigitStyle, const mode: ?Mode, const col0: ?bool = if (arg) |fmt| blk: { var it = std.mem.splitScalar(u8, fmt, ','); break :blk .{ if (it.next()) |size| std.fmt.parseInt(usize, size, 10) catch null else null, if (it.next()) |leader| std.meta.stringToEnum(Leader, leader) orelse null else null, if (it.next()) |style| std.meta.stringToEnum(DigitStyle, style) orelse null else null, if (it.next()) |mode| std.meta.stringToEnum(Mode, mode) orelse null else null, + if (it.next()) |col0| std.mem.eql(u8, col0, "true") else null, }; - } else .{ null, null, null, null }; + } else .{ null, null, null, null, null }; return Button.create_widget(Self, allocator, parent, .{ .ctx = .{ @@ -61,6 +63,7 @@ pub fn create(allocator: Allocator, parent: Plane, event_handler: ?EventHandler, .leader = leader, .style = style, .mode = mode, + .col0 = col0, }, .label = "", .on_click = on_click, @@ -110,18 +113,19 @@ fn format(self: *Self) void { }; writer.print("{s}{s} ", .{ eol_mode, indent_mode }) catch {}; + const displayColumn = if (self.col0 orelse false) self.column else self.column + 1; (blk: switch (self.mode orelse .default) { .default => writer.print("Ln {f}, Col {f} ", .{ digits_fmt(self, self.line + 1), - digits_fmt(self, self.column + 1), + digits_fmt(self, displayColumn), }), .compact => writer.print(" {f}:{f} ", .{ digits_fmt(self, self.line + 1), - digits_fmt(self, self.column + 1), + digits_fmt(self, displayColumn), }), .total => writer.print(" {f}:{f}/{f} ", .{ digits_fmt(self, self.line + 1), - digits_fmt(self, self.column + 1), + digits_fmt(self, displayColumn), digits_fmt(self, self.lines), }), .percent => {